Nginx负载均衡之upstream模块详解
upstream模块介绍
Nginx的负载均衡功能来自于其模块ngx_http_upstream_module模块,该模块支持的代理方式有:
1. uwsgi_pass
2. fastcgi_pass
3. proxy_pass
4. memcached_pass
ngx_http_upstream_module模块允许Nginx定义一组或多组节点服务器,使用时可以通过proxy_pass代理方式,把用户请求发送到事先定于好的upstream组中。具体写法就是
upstream www_pools { server x.x.x.x; server x.x.x.x; } proxy_pass http://www_pools;
完整的upstream配置案例
upstream www_pools { server 192.168.178.121; server 192.168.178.122:80 weight=1 max_fails=1 fail_timeout=10s; server 192.168.178.123:80 weight=10 max_fails=2 fail_timeout=20s backup; server 192.168.178.124:80 wetight=10 max_fails=2 fail_timeout=20s backup; }
使用域名及socket的upstream配置
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backend3.example.com:8080 backup; }
upstream参数
# 参数解释 server是固定关键字,后面跟着服务器ip或是域名,默认是80端口,也可以指定端口 weight表示节点的权重,数字越大,分配的请求越多,注意nginx结尾的分号 max_fails Nginx尝试连接后端节点失败的次数,根据企业情况调整,默认是1 backup 其它所有的非backup机器down或者忙的时候,请求backup机器,实现热备效果。 fail_timeout 在max_fails定义的次数失败后,距离下次检查的间隔时间,默认10s down 表示当前主机暂停,不参与负载均衡 upstream模块的内容应放于nginx.conf配置中的 http{}标签内 其默认调度算法是wrr(权重轮询,weighted round-robin)
upstream模块调度算法
【rr轮询调度算法】
【wrr权重轮询】
upstream backend { server 192.168.178.122 weight=1; server 192.168.178.121 weight=2; }
【ip_hash】
upstream chaoge_backend { ip_hash; server 192.168.178.121; server 192.168.178.122; }
【fail】
该算法根据后端服务器节点的响应时间来分配,响应时间短的优先分配。nginx本身不支持fail形式,如果要支持该算法,必须下载nginx的upstream模块。
upstream chaoge_backend { fair; server 192.168.178.121; server 192.168.178.122; }
【least_conn】
该算法根据后端节点的连接数决定分配请求,哪个机器连接数少,就发给谁。
【url_hash】
需要单独安装hash模块
upstream chaoge_backend { server squid1:3128; server squid:3128; hash $request_uri; hash_method crc32; }
proxy_pass指令
案例1
在nginx.conf配置文件中定义 location /name/ { proxy_pass http://127.0.0.1/remote/; } 例如当请求URL是: http://192.168.178.121/name ,会进入该locaiton的作用域,通过参数proxy_pass请求转发给了http://127.0.0.1/remote/
案例2
location ~ .*\.php$ { proxy_pass http://www.example.cn$request_uri; proxy_set_header Host $proxy_host; proxy_set_header X-Forwarded-For $remote_addr; } 所有请求以.php结尾的URL,进行转发
proxy_pass参数
参数 | 作用解释 |
proxy_set_header | 设置反向代理向后端发送的http请求头信息,如添加host主机头部字段,让后端服务器能够获取到真是客户端的IP信息等。 |
client_body_buffer_size | 指定客户端请求主体缓冲区大小 |
proxy_connect_timeout | 反向代理和后端节点连接的超时时间,也是建立握手后等待响应的时间 |
proxy_send_timeout | 表示代理后端服务器的数据回传时间,在规定时间内后端若数据未传完,nginx会断开连接 |
proxy_read_timeout | 设置nginx从代理服务器获取数据的超时时间 |
proxy_buffer | 设置缓冲区的数量大小 |