使用Nginx反向代理实现负载均衡

来源:互联网 发布:千牛手机淘宝店铺装修 编辑:程序博客网 时间:2024/05/29 19:31

前期准备

为了实现负载均衡,我准备了两台服务器。

  • 192.168.1.101 这台服务器用于反向代理和web服务器。
  • 192.168.58.129 这台服务器仅用作web服务器。

因为我的计算机只装了一台虚拟机。所以暂且使用同一台机器,即作为代理服务器又作为web服务器。分配不同的端口,对实验结果没有影响。

什么是代理

正向代理就是我们平时用的vpn翻墙软件。通过代理这个跳板可以实现访问被防火墙限制的外网。我简单画了一个图。(注:此处使用的图只有请求没有响应。)
这里写图片描述
通过代理去访问想要访问的服务器,然后代理再把结果反馈回浏览器。
在这一过程中,代理对于用户是可见的,且需要客户端配置之后才能访问。

什么是反向代理

和正向代理相反,正向代理是由客户端配置而使用。所以反向代理是由web服务器配置而使用。这一过程对于客户端来说是不可见的。客户端不会知道有反向代理的存在。这里也简单画了一个图。
这里写图片描述
在反向代理的请求中,反向代理拿到请求信息后,根据所配置的规则,访问不同的web服务器,最后再把响应信息返回给浏览器。

反向代理的配置

在nginx的配置文件中。server中间加入以下代码就可以了。

location / {    #反向代理    proxy_pass http://192.168.58.129;}

这段配置的意思是,当访问192.168.1.101:8081(此服务器使用8081端口作为代理,使用8080端口作为web服务器。)时。会作为代理,去访问192.168.58.129。

查看结果
这里写图片描述

什么是负载均衡

简单的解释,web服务器的I/O操作是比较消耗时间的。当服务器的请求过高时,会大大消耗服务器的性能。而在访问服务器之间,加一台代理服务器,通过代理服务器,把流量分配给不同的web服务器。以减轻单台服务器的压力。图示如下。
这里写图片描述

负载均衡的配置

nginx提供的Upstream模块,客户实现负载均衡的策略。
在http的内部,server的外部加入不同的server。

#负载均衡(反向代理)upstream test {  #web服务器  server 192.168.58.129:80;  #当前服务器  server 192.168.1.101:8080;}

将这些服务器,分配给反向代理。在server的内部加入以下代码

location / {    #反向代理    proxy_pass http://test;    #proxy_pass http://192.168.58.129; }

配置好了之后,我的负载均衡就完成了。在这个策略中,每次请求都会在192.168.58.129和192.168.1.101直接顺序循环切换。
这里写图片描述
这里写图片描述

负载均衡策略

nginx的Upstream模块提供了不少策略。我们实验中使用的是默认的策略,即循环分配到指定的服务器。此外还有以下策略。

  1. ip_hash
    记录每次访客的ip地址,固定分配给指定的服务器,有效的解决了不同服务器网页Session的问题。
  2. fair
    根据后端服务器响应的时间长短来分配,响应时间越短被分配几率越大。
  3. url_hash
    按访问的地址url的hash值结果分配,使每个url定向到指定的服务器,可以提高后端服务器的缓存效率。

可以根据不同需求选择不同的策略,但是2、3两个策略需要下载插件作为支撑。