一般的负载均衡软件如LVS实现的功能只是对请求数据包的转发和传递,从负载均衡下的节点服务器来看,接收到的请求还是来自访问负载均衡器的客户端的真实用户;而反向代理服务器在接收到用户的访问请求后,会代理用户重新向节点服务器(Web服务器、文件服务器、视频服务器)发起请求,反向代理服务器和节点服务器做具体的数据交互,最后把数据返回给客户端用户。在节点服务器看来,访问的节点服务器的客户端就是反向代理服务器,而非真实的网站访问用户,具体原理如图所示。
# 1.upstream_module
ngx_http_upstream_module是Nginx的负载均衡模块,可以实现网站的负载均衡功能即节点的健康检查。upstream模块允许Nginx定义一组或多组节点服务器,在使用时可通过proxy_pass代理方式把网站的请求发送到事先定义好的对应Upstream组的名字上。具体的upstream定义如下:
upstream restLVSServer{
server 191.168.1.10:9000 weight=5 ;
server 191.168.1.11:9000;
server example.com:9000 max_fails=2 fail_timeout=10s backup;
}
2
3
4
5
如上代码定义了名为restLVSServer的upstream,并在其中定义了3个服务地址,在用户请求restLVSServer服务时,Nginx会根据权重将请求转发到具体的服务器。常用的upstream配置如下。
- weight:服务器权重。
- max_fails:Nginx尝试连接后端服务器的最大失败次数,如果失败时大于max_fails,则认为该服务器不可用。
- fail_timeout:max_fails和fail_timeout一般会关联使用,如果某台服务器在fail_timeout时间内出现了max_fails次连接失败,那么Nginx会认为其已经挂掉,从而在fail_timeout时间内不再去请求它,fail_timeout默认是 10s,max_fails默认是1,即在默认情况下只要发生错误就认为服务器挂了,如果将max_fails设置为0,则表示取消这项检查。
- backup:表示当前服务器是备用服务器,只有其他非backup后端服务器都挂掉或很忙时,才会分配请求给它。
- down:标志服务器永远不可用。
# 2.proxy_pass
proxy_pass指令属于ngx_http_proxy_module模块,此模块可以将请求转发到另一台服务器,在实际的反向代理工作中,会通过location功能匹配指定的URI,然后把接收到的服务匹配URI的请求通过proxy_pass抛给定义好的upstream节点池。具体的proxy_pass定义如下:
location /download/ {
proxy_pass http://192.168.1.13:9000/download/vedio/;
}
2
3
如 上 代 码 定 义 了 一 个 download 的 反 向 代 理 , 在 客 户 端 请求/download时,Nginx会将具体的请求转发给proxy_pass配置的地址处理请求,这里配置的地址是http://192.168.1.13:9000/download/vedio/。常用的proxy_pass配置如表所示。