前一篇:二、nginx服务的nginx.conf配置参数解析
目录
1.3、max_fails和 fail_timeout的配置
一、虚拟主机设定模块
#负载均衡服务器列表
#一般来说运维人员通常把负载均衡类别配置在相应的虚拟主机的配置文件中)
1、upstream模块配置样式
upstream fansik {
#后端服务器访问规则
ip_hash;
#weight参数表示权重值,权值越高被分配到的几率越大
server 192.168.1.101:8081 weight=5;
server 192.168.1.102:8081 max_fails=3 fail_timeout=10s;
}
1.1、默认配置
upstream fansik {
server 192.168.1.101:8081;
server 192.168.1.102:8081;
}
默认的配置后端的服务器访问规则就是默认的轮询方式的,就简单的表述:
1进来访问192.168.1.101的服务
2进来访问192.168.1.102的服务
该轮询的访问规则时无法进行一个权重、或者是资源请求的判断的功能的。
1.2、weight(权重)配置
upstream fansik {
#weight参数表示权重值,权值越高被分配到的几率越大
server 192.168.1.101:8081 weight=5;
server 192.168.1.102:8081 weight=1;
}
注:ip_hash 与 weight(权重)配置不可同时使用。
1.3、max_fails和 fail_timeout的配置
max_fails=number:该选项与 fail_timeout 配合使用,旨在 fail_timeout 时间段内,如果向当前的上游服务器转发失败次数超过 number,则认为在当前的 fail_timeout 时间段内这台上游服务器不可用。max_fails 默认为1,如果设置为0,则表示不检查失败次数。
fail_timeout=time:fail_timeout 表示该时间段内转发失败多少次后就认为上游服务器暂时不可用,用于优化方向代理功能。它与向上游服务器建立连接的超时时间、读取上游服务器的响应时间等完全无关,
upstream report{
server 192.168.1.102:18080 max_fails=10 fail_timeout=60s;
server 192.168.1.103:28080 max_fails=10 fail_timeout=60s;
server 192.168.1.104:18080 max_fails=10 fail_timeout=60s;
#ip_hash;
}
但是需要配置proxy_next_upstream参数使用的
location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
# proxy_next_upstream
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_connect_timeout 20s;
proxy_read_timeout 20s;
proxy_send_timeout 20s;
}
1.4、down的配置
down表示单前的server暂时不参与负载,不适用与ip_hash的访问策略的
upstream myServer {
server 192.168.1.102:9090 down;
server 192.168.1.103:9090;
}
1.5、backup的配置
备用服务器, 其它所有的非backup机器down或者忙的时候,请求backup机器,简单的理解就是:只有在所有的非备份上游服务器都失效后,才会向所在的上游服务器转发请求
upstream myServer {
server 192.168.1.102:9090 backup;
server 192.168.1.103:9090;
}
注:在使用 ip_hash 配置项时它是无效的。
1.6、max_conns的配置
# worker进程设置1个,便于测试观察成功的连接数
worker_processes 1;
upstream tomcats {
server 192.168.1.102:8080 max_conns=2;
server 192.168.1.103:8080 max_conns=2;
server 192.168.1.104:8080 max_conns=2;
}
注:限制每台server的连接数,用于保护避免过载,可起到限流作用。
2、ip_hash的配置
使用场景:
在有些场景下,我们可能会希望来自某一个用户的请求始终落在国定的一台上游服务器中。例如,假设上游服务器会缓存一些信息,如果同一个用户的请求任意的转发到集群中的任一台上游服务器中,那么每一台上游服务器都有可能会缓存同一份信息,这既会造成资源的浪费,也会难以有效的管理缓存信息。ip_hash 就是泳衣解决上述问题的,它首先根据客户端的 IP 地址计算出一个 key,将 key 按照 upstream 集群里的上游服务器数量进行取模,然后以取模的结果把请求转发到相应的上游服务器中。这样就确保了同一个客户端的请求只会转发到指定的上游服务器中。
upstream backend {
ip_hash;
server 192.168.11.10:8080;
server 192.168.11.11:8080;
server 192.168.11.12:8080 down;
server 192.168.11.13:8080;
}
3、url_hash(第三方插件)
url_hash按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。
在upstream中加入hash语句,hash_method是使用的hash算法
upstream resinserver{
server 192.168.10.10:8080;
server 192.168.10.11:8080;
hash $request_uri;
hash_method crc32;
}
4、fair(第三方插件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream resinserver{
server 192.168.1.10:8080;
server 192.168.1.11:8080;
fair;
}
二、server配置
server {
#监听80端口
listen 80;
#定义主机名,主机名可以有多个,名称还可以使用正则表达式(~)或通配符
#(1)先做精确匹配检查
#(2)左侧通配符匹配检查:*.fansik.com
#(3)右侧通配符匹配检查:mail.*
#(4)正则表达式匹配检查:如~^.*\.fansik\.com$
#(5)detault_server
server_name fansik.fansik.com;
#设定本虚拟主机的访问日志
access_log logs/fansik.fansik.com.access.log;
server {
listen 80;
server_name fansik.fansik.com;
access_log logs/fansik.fansik.com.access.log;
location [=|~|~*|^~] uri {...}
功能:允许根据用户请求的URI来匹配定义的个location,匹配到时,此请求将被相应的location配置块中的配置所处理
=:表示精确匹配检查
~:正则表达式模式匹配检查,区分字符大小写
~*:正则表达式模式匹配检查,不区分字符大小写
^~:URI的前半部分匹配,不支持正则表达式
!~:开头表示区分大小写的不匹配的正则
!~*:开头表示不区分大小写的不匹配的正则
/:通用匹配,任何请求都会被匹配到
location / {
#定义服务器的默认网站根目录位置
root html;
#定义首页索引文件的名称
index index.html index.htm;
#引用反向代理的配置,配置文件目录根据编译参数而定
include proxy.conf;
#定义后端负载服务器组
proxy_pass http://fansik;
}
#如果编译时加入了--conf-path=/etc/nginx/nginx.conf指定了配置文件的路径那么就把proxy.conf放在/etc/nginx/目录下
#如果没有制定配置文件路径那么就把proxy.conf配置放到nginx的conf目录下。
alias path和root path的区别;
location /images/ {
root "/data/images"
}
访问:http://fansik.fansik.com/images/a.jpg 就是直接去访问服务的/data/images/images/a.jpg的内容
location /images/ {
alias "/data/images/"
}
访问:http://fansik.fansik.com/images/a.jpg 就是直接去访问服务的/data/images/images/a.jpg的内容
#定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#设定查看Nginx状态的地址
#只能定义在location中
#htpasswd -c -m /etc/nginx/.htpasswd fansik(-c 参数第一次创建时使用)
location /Status {
stub_status on;
allow all;
#access_log off;
#allow 192.168.1.0/24;
#deny all;
#auth_basic "Status";
#auth_basic_user_file /etc/nginx/.htpasswd;
}
status结果实例说明:
Active connections: 1 (当前所有处于打开状态的连接数)
server accepts handled requests
174(已经接受进来的连接)174(已经处理过的连接)
492(处理的请求,在保持连接模式下,请求数可能会多于连接数量)
Reading: 0 Writing: 1 Waiting: 0
Reading:正处于接受请求状态的连接数
Writing:请求接受完成,正处于处理请求或发送相应的过程中的连接数
Waiting:保持连接模式,且处于活动状态的连接数
#基于IP的访问控制
allow IP/Netmask
deny IP/Netmask
location ~ /\.ht {
deny all;
}
样式:
server {
listen 80;
server_name fansik.fansik.com;
access_log logs/fansik.fansik.com.access.log;
location / {
root html;
index index.html index.htm;
include proxy.conf;
proxy_pass http://fansik;
}
location /images/ {
root "/data/images"
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /Status {
stub_status on;
allow all;
#access_log off;
#allow 192.168.1.0/24;
#deny all;
#auth_basic "Status";
#auth_basic_user_file /etc/nginx/.htpasswd;
}
allow IP/Netmask
deny IP/Netmask
location ~ /\.ht {
deny all;
}
}