nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
代理服务器 192.168.1.10 ubuntu12.04 nginx/1.1.19
WEB服务器1 192.168.1.11:8080 ubuntu12.04 tomcat 7.0.54
WEB服务器2 192.168.1.12:8080 ubuntu12.04 tomcat 7.0.54
(2)修改nginx的配置文件:/etc/nginx/nginx.conf
Note:
(1)配置文件中参数的对应关系:upstream: www.test.cn 和 proxy_pass: http://www.test.cn;
(2)upstream中的server可设置多个:server 192.168.1.11:81;如果端口为80,则可省略端口号;
(3)upstream设备上的状态设置
- down:标记服务器为永久离线状态;
- weight:设置服务器的权重,权重数值越高,被分配到客户端的请求次数越多,默认值为1;
- max_fails:在参数fail_timeout指定时间内对后端服务器请求失改的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失改。如果没有设置,则默认值为1,设置为0将关闭这项检查。
- fail_timeout:max_fails次失败后,暂停的时间;
- backup:仅在非backup服务器全部宕机或繁忙的时候才启用,这台服务器的负载会最轻;
(2)修改tomcat下webapp/ROOT/index.jsp,增加特定标识以便测试;
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream webserver {
server 192.168.1.11;
server 192.168.1.12;
}
(2)weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream webserver {
server 192.168.1.11 weight=5;
server 192.168.1.12 weight=10;
}
(3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream webserver {
ip_hash;
server 192.168.1.11;
server 192.168.1.12;
}
(4)fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream bakend {
server 192.168.1.11;
server 192.168.1.12;
fair;
}
(5)url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backend {
server 192.168.1.11;
server 192.168.1.12;
hash $request_uri;
hash_method crc32;
}
1. 安装nginx
可参考前篇文章 Ubuntu下Nginx的安装与配置2. 负载均衡配置
(1)测试环境的参数:代理服务器 192.168.1.10 ubuntu12.04 nginx/1.1.19
WEB服务器1 192.168.1.11:8080 ubuntu12.04 tomcat 7.0.54
WEB服务器2 192.168.1.12:8080 ubuntu12.04 tomcat 7.0.54
(2)修改nginx的配置文件:/etc/nginx/nginx.conf
upstream www.test.cn {
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://www.test.cn;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Note:
(1)配置文件中参数的对应关系:upstream: www.test.cn 和 proxy_pass: http://www.test.cn;
(2)upstream中的server可设置多个:server 192.168.1.11:81;如果端口为80,则可省略端口号;
(3)upstream设备上的状态设置
- down:标记服务器为永久离线状态;
- weight:设置服务器的权重,权重数值越高,被分配到客户端的请求次数越多,默认值为1;
- max_fails:在参数fail_timeout指定时间内对后端服务器请求失改的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失改。如果没有设置,则默认值为1,设置为0将关闭这项检查。
- fail_timeout:max_fails次失败后,暂停的时间;
- backup:仅在非backup服务器全部宕机或繁忙的时候才启用,这台服务器的负载会最轻;
3. 测试
(1)修改你电脑上的hosts,以方便测试,win7下打开C:\Windows\System32\drivers\etc\hosts文件,添加 192.168.1.10 www.test.cn(2)修改tomcat下webapp/ROOT/index.jsp,增加特定标识以便测试;
(3)浏览器打开:http://www.test.cn 刷新页面,会交替出现如下信息;
(4)stop其中一个tomcat,再次访问,则只显示一个信息。
4. Nginx Upstream目前支持的分配方式
(1)轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream webserver {
server 192.168.1.11;
server 192.168.1.12;
}
(2)weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream webserver {
server 192.168.1.11 weight=5;
server 192.168.1.12 weight=10;
}
(3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream webserver {
ip_hash;
server 192.168.1.11;
server 192.168.1.12;
}
(4)fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream bakend {
server 192.168.1.11;
server 192.168.1.12;
fair;
}
(5)url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backend {
server 192.168.1.11;
server 192.168.1.12;
hash $request_uri;
hash_method crc32;
}