Nginx通常使用upstream和http_proxy_module这两个模块来实现负载均衡的需求 。
1、upstream_module模块
upstream_module模块用来定义可被引用的服务器组,该模块应放于nginx.conf配置文件的http{}标签内
weight=number | 服务权重值,默认为1,数值越大,访问概率越高 |
max_conns=number | 配置服务器同时连接的最大连接数,默认为0,即无限制 |
max_fails=number | 配置与服务器尝试重连次数。默认为1,0表示禁用重连,一般配置2-3次, |
fail_timeout=number | 连接超时时间,默认为10s |
backup | 将该服务器设置为备用服务器,当主服务器不可用时,会将不可用信息传递到备用服务器 |
2、http_proxy_module模块
proxy_pass url | 将请求转发给后端服务器主机 |
proxy_connect_timeout | 指定后端服务器连接超时时间 |
proxy_buffer_size | 指定缓冲区的大小,默认大小与proxy_buffers的值大小相同 |
proxy_temp_file_write_size | 指定proxy缓冲临时文件的大小 |
proxy_set_header value | 设置http请求header项传给后端服务节点,例如:可实现让代理后端的服务节点获取访问客户端用户的真实IP地址,以及让后端服务器得知访问的哪一个server虚拟主机 |
proxy_ssl_certificate file | 指定使用证书的目录路径 |
proxy_ssl_certificate_key file | 指定使用秘钥文件的目录路径 |
proxy_send_timeout | 表示代理后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则Nginx将断开这个连接 |
proxy_pass http://halo;
#请求转发到upstream定义的server_pools中去
proxy_set_header Host $host;
#反向代理服务器请求节点服务器时,在http请求头中加入host字段信息,
用以指定访问的是节点服务器的哪一个虚拟主机,当节点服务器存在多个
虚拟主机时,该参数非常重要;
proxy_set_header X-Forwarded-For $remote_addr;
#反向代理服务器请求节点服务器时,在http请求头中加入X-Forwarded-For
字段信息,这样后端节点服务器的日志就能正常记录得客户端的ip地址信息了,
而不是记录代理服务器的ip,这需要在节点服务器的日志添加$http_x_forwarded_for,
为了简单化主配置文件,可以使用include proxy.conf的方式把配置参数添加进来。