Nginx负载均衡配置实例

什么是负载均衡

负载均衡主要通过专门的硬件设备或者通过软件算法实现。通过硬件设备实现的负载均衡效果好、效率高、性能稳定,但是成本比较高。通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性。均衡算法也是多种多样的,常见的有两大类:即静态负载均衡算法和动态负载均衡算法。静态算法实现比较简单,在一般网络环境下也能达到比较好的效果,主要有一般轮询算法、基于比率的加权轮询算法以及基于优先级的加权轮询算法等。动态负载均衡算法在较为复杂的网络环境中适应性更强,效果更好,主要有基于任务量的最少连接优先算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等。

网络负载均衡技术的大致原理是利用一定的分配策略将网络负载平衡地分摊到网络集群的各个操作单元上,使得单个重负载任务能够分担到多个单元上并行处理,或者使得大量并发访问或数据 流量分担到多个单元上分别处理,从而减少用户的等待响应时间。

Nginx服务器负载均衡配置

Nginx服务器实现了静态的基于优先级的加权轮询算法,主要使用的配置是proxy_pass指令和upstream指令,这些内容实际上很容易理解,关键点在于Nginx服务器的配置灵活多样,如何在配置负载均衡的同时合理地整合其他功能,形成一套可以满足实际需求的配置方案。

下面的有一些基础示例片段,当然不可能将所有的配置情况包括在内,希望能够起到抛砖引玉的效果,同时也需要大家在实际应用过程中多总结多积累。在配置中需要注意的地方将以注释的形式添加。

配置实例一:对所有请求实现一般轮询规则的负载均衡

在以下实例片段中,backend服务器组中所有服务器的优先级全部配置为默认的weight=1,这样它们会按照一般轮询策略依次接收请求任务。该配置是一个最简单的实现Nginx服务器负载均衡的配置。所有访问 的请求都会在backend服务器组中实现负载均衡。实例代码如下:

...

 

upstream backend                    #配置后端服务器组

{

   server 192.168.1.2:80;

   server 192.168.1.3:80;

   server 192.168.1.4:80;          #默认weight=1

}

server

{

   listen 80;

   server_name ;

   index index.html index.htm;

   location / {

       proxy_pass ;

       prox_set_header Host $host;

   }

   ...

}  

配置实例二:对所有请求实现加权轮询规则的负载均衡

与“配置实例一”相比,在该实例片段中,backend服务器组中的服务器被赋予了不同的优先级别,weight变量的值就是轮询策略中的“权值”。其中,192.168.1.2:80的级别最高,优先接收和处理客户端请求;192.168.1.4:80的级别最低,是接收和处理客户端请求最少的服务器,192.168.1.3:80将介于以上两者之间。所有访问的请求都会在backend服务器组中实现加权负载均衡。实例代码如下:

...

 

upstream backend                    #配置后端服务器组

{

   server 192.168.1.2:80 weight=5;

   server 192.168.1.3:80 weight=2;

   server 192.168.1.4:80;          #默认weight=1

}

server

{

   listen 80;

   server_name ;

   index index.html index.htm;

   location / {

       proxy_pass ;

       prox_set_header Host $host;

   }

   ...

}

配置实例三:对特定资源实现负载均衡

在该实例片段中,我们设置了两组被代理的服务器组,名为“videobackend”的一组用于对请求video资源的客户端请求进行负载均衡,另一组用于对请求filed资源的客户端请求进行负载均衡。所有对“* ”的请求都会在videobackend服务器组中获得均衡效果,所有对“* ”的请求都会在filebackend服务器组中获得均衡效果。该实例中展示的是实现一般负载均衡的配置,对于加权负载均衡的配置可以参考“配置实例二”。

在location /file/ {......}块中,我们将客户端的真实信息分别填充到了请求头中的“Host”、“X-Real-IP”和“X-Forwareded-For”头域,这样后端服务器组收到的请求中就保留了客户端的真实信息,而不是Nginx服务器的信息。实例代码如下:

...

 

upstream videobackend                    #配置后端服务器组1

{

   server 192.168.1.2:80;

   server 192.168.1.3:80;

   server 192.168.1.4:80;

}

upstream filebackend                    #配置后端服务器组2

{

   server 192.168.1.5:80;

   server 192.168.1.6:80;

   server 192.168.1.7:80;

}

server

{

   listen 80;

   server_name ;

   index index.html index.htm;

   location /video/ {

       proxy_pass ; #使用后端服务器组1

       prox_set_header Host $host;

       ...

   }

   location /file/ {

       proxy_pass ;  #使用后端服务器组2

                                       #保留客户端的真实信息

       prox_set_header Host $host;

       proxy_set_header X-Real-IP $remote_addr;

       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

       ...

   }

}  

配置实例四:对不同域名实现负载均衡

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0c94df3ac8616843618f3453a7a0c408.html