Nginx服务器实现了静态的基于优先级的加权轮询算法,主要使用的配置是proxy_pass指令和upsteam指令。
1、配置实例一:对所有请求实现一般轮询规则的负载均衡
在以下实例片段中,backend服务器组中所有服务器的优先级全部配置为默认的weight=1,这样它们会按照一般轮询策略依次接收请求任务。该配置是一个最简单的实现Nginx服务器负载均衡的配置。所有访问www.myweb.name的请求都会在backend服务器组中实现负载均衡。实例代码如下:
2、配置实例二:对所有请求实现加权轮询规则的负载均衡
与“配置实例一”相比,在该实例片段中,backend服务器组中的服务器被赋予了不同的优先级别,weight变量的值就是轮询策略中的“权值”。其中,192.168.1.2:80的级别最高,优先接收和处理客户端请求;192.168.1.4:80的级别最低,是接收和处理客户端请求最少的服务器,192.168.1.3:80将介于以上两者之间。所有访问www.myweb.name的请求都会在backend服务器组中实现加权负载均衡。实例代码如下:
3、配置实例三:对特定资源实现负载均衡
在该实例片段中,我们设置了两组被代理服务器组,名为“videobackend”的一组用于对请求video资源的客户端请求进行负载均衡,另一组用于对请求file资源的客户端请求进行负载均衡。通过对location块URI的不同配置,我们就很轻易地实现了对特定资源的负载均衡。所有对“http://www.myweb.name/video/*”的请求都会在videobackend服务器组中获得均衡效果,所有对“http://www/myweb.name/file/*”的请求都会在filebackend服务器组中获得均衡效果。在该实例中展示的是实现一般负载均衡的配置,对于加权负载均衡的配置可以参考“配置实例二”。
在location /file/ {...}块中,我们将客户端的真实信息分别填充到了请求头中的“Host”、“X-Real-IP”和“X-Forward-For”头域,这样后端服务器组收到的请求中保留了客户端的真实信息,而不是Nginx服务器的信息。实例代码如下:
4、配置实例四:对不同域名实现负载均衡
在该实例片段中,我们设置了两个虚拟服务器和两种后端被代理的服务器组,分别用来接收不同的域名请求和对这些请求进行负载均衡处理。如果客户端请求域名为“home.myweb.name”,则由服务器server1接收并转向homebackend服务器组进行负载均衡处理;如果客户端请求域名为“bbs.myweb.name”,则由服务器server2接收并转向bbsbackend服务器组进行负载均衡处理。这样就实现了对不同域名的负载均衡。实例代码如下:
5、配置实例五:实现带有URL重写的负载均衡
该实例片段与“配置实例一”相比,增加了对URL包含“/file/”的URL重写功能。例如客户端的请求URL为“http://www.myweb.name/file/download/media/1.mp3”时,该虚拟服务器首先使用location /file/ {...}块将该URL进行重写为“http://www.myweb.name/file/download/mp3/1.mp3”,然后新的URL再由location / {...}块转发到后端的backend服务器组中实现负载均衡。这样,就轻而易举地实现了带有URL重写功能的负载均衡。在该配置方案中,一定要掌握清楚rewrite指令中last标记和break标记的区别,才能达到预计的效果。