1、Nginx负载均衡配置
预期实现效果:
在浏览器地址栏中输入:http://www.123.com ,nginx收到请求后把请求平均分匹配到Linux服务器上监听8080和8081端口的两个tomcat服务器上。
1.1 准备工作
(1)首先在host文件中配置域名映射:192.168.92.128 www.123.com
(2)准备两个tomcat服务器,分别监听8080和8081端口,并在各自目录下新建一个edu目录,并创建index.html测试页面,配置完成后启动,让两个tomcat跑起来。
1.2 nginx负载均衡配置
在nginx的http模块下配置upstream
模块,upstream的语法是:
upstream 自定义域名{
[负载均衡策略;]
server xxx.xxx.xxx.xxx:port [weight=xx] [down|backup|max_fails=xx|fail_timeout=xx]l];
}
注:[]
中的内容是可选的。 简单配置如下:
http {
#配置负载均衡:默认使用轮询策略
upstream myserver{
server 192.168.92.128:8080;
server 192.168.92.128:8081;
}
server {
listen 80;
server_name 192.168.92.128;
charset utf-8;
location /{
root html;
proxy_pass http://myserver;
index index.html index.htm;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
error_page 404 /404.html;
}
}
测试结果 在浏览器地址栏中输入www.123.com/edu ,结果和预期一样,nginx让两个tomcat轮询处理请求:

负载均衡配置运行结果
2、upstream模块详解
upstream
是Nginx中配置负载均衡的关键模块,基本语法:
upstream 自定义域名{
......
}
upstream有关的参数如下:
- server:用于配置反向服务地址和端口,语法:
server address [parameters];
- weight:权重,语法:
weight=number
,默认是1- max_conns:语法:
max_conns=number
,用于限制到代理服务器的同时活动连接的最大数量,默认是0- max_fail:语法:
max_fails=number
,允许请求失败的次数。经常和fail_timeout
参数配合使用。- fail_timeout:语法:
fail_timeout=time
, 经过max_fails失败后,服务暂停的时间(默认10s)- backup: 预留的备份服务器(当其他的节点挂掉,备份服务器启动)
- down:当前的server暂时不参与负载均衡(不对外提供服务)
- slow_start:语法:
slow_start=time
,设置服务器不正常运行时,或者在一段时间后服务器变为不可用时,服务器将其权重从零恢复到指定值的时间。 默认值为零,即禁用慢速启动。- service:语法:
service=name
,启用DNS SRV记录的解析并设置服务名称。 为了使此参数起作用,必须为服务器指定resolve参数,并指定不带端口号的主机名。- resolve:监视与服务器域名相对应的IP地址的更改,并自动修改upstream配置,而无需重新启动nginx。
配置示例:
upstream myserver{
server 192.168.92.128:8080 max_fail=3 fail_timeout=100;
server 192.168.92.128:8081 max_fail=3 fail_timeout=100;
server 192.168.92.128:8082 backup; #备用服务器
server 192.168.92.128:8083 down; #不参与请求的服务器
server 192.168.92.128:8084 backup max_conns=1000; #备用服务器,当启用后最大连接数是1000
}
max_fail=3 fail_timeout=100
的含义是:当一台服务器在100s内如果出现了3次请求失败,就会报机器的状态设置为down,并且会在100s后尝试重新启用这个服务器。
3、nginx负载均衡调度算法详解
Nginx目前支持的调度策略有以下5种:
(1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream myserver{
server 192.168.92.128:8080;
server 192.168.92.128:8081;
}
#####(2)加权轮询 指定轮询权重,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况。
upstream myserver{
#在server语句中加入weight参数指定一个权重就进入到加权轮询模式
#8080获得的请求是8081的2倍
server 192.168.92.128:8080 weight=10;
server 192.168.92.128:8081 weight=5;
}
#####(3)ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享的问题。应用场景:保持session 一至性
upstream myserver{
#指定ip_hash,就进入到ip_hash模式
ip_hash;
server 192.168.92.128:8080;
server 192.168.92.128:8081;
}
#####(4)url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 应用场景:静态资源缓存,节约存储,加快速度
hash $request_uri;
hash_method crc32;
server 192.168.92.128:8080;
server 192.168.92.128:8081;
其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。
#####(5)fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
fair; #指定fair就会进入到fair模式
server 192.168.92.128:8080;
server 192.168.92.128:8081;