Nginx不仅可作为一个Web服务器或反向代理服务器,还可以按照权重、轮询、ip_hash、URL hash等多种方式实现对后端服务器的负载均衡。
负载均衡就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。
客户端向反向代理发送请求,接着反向代理根据某种负载机制转发请求至目标服务器(这些服务器都运行着相同的应用),并把获得的内容返回给客户端,期中,代理请求可能根据配置被发往不同的服务器。
通过Nginx中的upstream指令可以实现负载均衡,在该指令中能够配置负载均衡服务器组。目前负载均衡有4种典型的配置方式,分别为轮询方式、权重方式、ip_hash方法,以及利用第三方模块的方式。
配置方式 | 说明 |
轮询方式 | 负载均衡默认设置方式,每个请求按照时间顺序逐一分配到不同的后端服务器进行处理,如果有服务器宕机,会自动删除 |
权重方式 | 利用weight指令轮询的权重比率,与访问率成正比,用于后端服务器性能不均的情况 |
ip_hash方式 | 每个请求按访问IP的hash结果分配,这样可以使每个访客固定访问一个后端的服务器,可以解决session共享问题 |
第三方模块 | 第三方模块采用fair时,按照每台服务器的响应时间来分配请求,响应时间短的优先分配;若第三方模块采用url_hash时,按照访问url的hash值来分配请求 |
在upstream指定的服务器组中,若每个服务器的权重都设置为1(默认值)时,表示当前的负载均衡是一般轮询方式。
另外,Nginx本身不包含第三方模块的实现方式,如fair或url_hash等,在使用时必须下载对应的upstream_fair模块或安装hash软件包,才可以实现第三方模块提供的负载均衡配置。
http { upstream myapp1 { server 192.168.1.103:8080; server 192.168.1.104:8080; } ……略 server { listen 80; server_name localhost; ……略 location /webautotest/ { proxy_buffering off; proxy_pass http://myapp1; } } }
ip-hash机制下,客户端ip地址被用作hash key来判断客户端请求应该发送到哪个服务器,这种方法保证了来自相同客户端的请求总是发送到相同服务器
upstream myapp1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
upstream myapp1 { server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; }