前言
nginx 不单可以作为强大的 web服务器,也可以作为一个反向代理服务器,而且 nginx 还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip 哈希、URL 哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
关于 nginx 反向代理的原理,网上有很多解释,我这里面就不多阐述了。
准备
代理机:192.168.1.196
网站:
192.168.1.195:8080
192.168.1.195:8081
192.168.1.195:8082
我这里是虚拟机,我就在开端口演示了。
开始之前最好把防火墙,selinux 都关闭哦,免得出现意想不到的问题。
资料:http://tengine.taobao.org/documentation_cn.html
配置
代理机配置:
upstream proxy {
server 192.168.1.195:8080;
server 192.168.1.195:8081;
server 192.168.1.195:8082;
}
server {
listen 80;
server_name www.proxy.com;
access_log /var/log/nginx/80.access.log main;
error_log /var/log/nginx/80.error.log warn;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://proxy;
}
}
注意:upstream 节点的名称 proxy( 名称自定义 ),对应 proxy_pass 配置为:http:// + upstream 名称,即"http://proxy",固定格式。
网站配置:
server {
listen 8080;
server_name www.proxy.com;
access_log /var/log/nginx/8080.access.log main;
error_log /var/log/nginx/8080.error.log warn;
root /usr/share/nginx/html/html8080/;
index index.html index.htm;
}
server {
listen 8081;
server_name www.proxy.com;
access_log /var/log/nginx/8081.access.log main;
error_log /var/log/nginx/8081.error.log warn;
root /usr/share/nginx/html/html8081/;
index index.html index.htm;
}
server {
listen 8082;
server_name www.proxy.com;
access_log /var/log/nginx/8082.access.log main;
error_log /var/log/nginx/8082.error.log warn;
root /usr/share/nginx/html/html8082/;
index index.html index.htm;
}
以上就可以实现均衡负载了
upstream 配置参数
nginx 的 upstream 目前支持 4 种方式的分配 。
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down 掉,能自动剔除。
2)、weight(权重)
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
upstream proxy {
server 192.168.1.195:8080 weight=5;
server 192.168.1.195:8081 weight=10;
server 192.168.1.195:8082 weight=8;
}
2)、ip_hash(访问 ip)
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream proxy {
ip_hash;
server 192.168.1.195:8080;
server 192.168.1.195:8081;
server 192.168.1.195:8082;
}
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配与 weight 分配策略相似。
upstream proxy {
server 192.168.1.195:8080;
server 192.168.1.195:8081;
server 192.168.1.195:8082;
fair;
}
4)、url_hash(第三方)
按访问 url 的 hash 结果来分配请求,使每一个 url 定向到同一个后端服务器。后端服务器为缓存时比较有效。
注意:在 upstream 中加入 hash 语句。server 语句中不能写入 weight 等其他的参数,hash_method 是使用的 hash 算法。
upstream proxy {
server 192.168.1.195:8080;
server 192.168.1.195:8081;
server 192.168.1.195:8082;
hash $request_uri;
hash_method crc32;
}
5)、upstream 还能够为每一个设备设置状态值,这些状态值的含义分别例如以下:
down:表示单前的 server 临时不參与负载.
weight:默认觉得 1.weight 越大,负载的权重就越大。
max_fails:同意请求失败的次数默觉得 1.当超过最大次数时,返回 proxy_next_upstream 模块定义的错误.
fail_timeout: max_fails 次失败后。暂停的时间。
backup:其他全部的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。
#定义负载均衡设备的 Ip 及设备状态
upstream bakend{
ip_hash;
server 192.168.1.195:8080 down;
server 192.168.1.195:8081 weight=2;
server 192.168.1.195:80;
server 192.168.1.195:8082 backup;
}








