首页 > 技术文章 > Nginx反向代理与负载均衡

wsnbba 2018-12-05 19:10 原文

首先搭建三个nginx,一台作为nginx反向代理负载均衡服务器,两台是web服务器

Nginx反向代理的配置文件是

WebA的配置文件是

WebB的配置文件和A的一样

 

 

在本地测试负载均衡的话,都需要加入本地映射文件

 

 

在windows测试的话加入windows的映射文件中即可

测试的时候我们会看到nginx反向代理负载均衡是按照权重进行分配的

 

 

 测试,假如其中一个web服务器坏了,用户再去访问的时候就不会访问到坏掉的那个web服务器,这是因为upstream服务器池自带健康检测功能,每隔一段时间会对后方的realserver(RS节点,web服务器)进行检测,它里面默认有许多我们看不到的参数,不写就是它默认的。所以后方的服务器池中的web服务器,坏一个两个不受影响。只要有一个好的web,用户的业务就不受影响。因此服务器池无需做备份,没有单点问题

 

 

 

测试二:把反向代理的配置文件修改一下,把ip是10.1.1.134的server后面加上backup,把它当备份,再进行访问

 

之前关了webA记得打开,在做测试

 

重启配置文件后访问,访问发现用户不会访问到作为备份的那一台web了。假如webA坏了呢?它就会访问作为备份的那一台web

 

backup的意思就是备份,只要服务器池里有一个web是好的能用,它就一直留着当备份。直到服务器池里其他server全坏了,它才默认被启动。所以,upstream服务器池是非常安全的,几乎不需要做备份。

backup的位置还可以写成down,意思是:在upstream里写了down,好的都会当成坏的,一般在做修复的时候会用到,假如后方的某一台web服务器临时需要对他做一下检修,不想让用户再将请求反向代理到它那里了,就可以临时在配置文件里加一个down参数,改好了再把配置文件里的down给去掉。Nginx可以通过reload平滑重启,不影响用户。

 

但是我们看到web服务器的转发日志里记录的ip是nginx的,不是用户自己的,那么这个日志就没用了,这是问题之一,还有一个问题就是用户不管是用哪个域名过去的,显示给用户看的一直是第一个网页,不能达到用户要求。

以上两个问题解决方法:访问www.yunjisuan.com看到的都是bbs,改一下配置文件,在proxy下面加:proxy_set_header host $host;   意思是,$host就是取值,取得值是http协议包里的用户的源ip,赋值给新的host变量,把右边的值赋给左边的变量,等号的意思。

 

 

 

还有一个问题怎么让web的日志里记录用户的Ip?

首先进入到webA的记录日志里,清空它

 

 

 

 

 

 

访问之后发现日志里记录的是反向代理的IP,就要想办法把IP地址给传递过去,想要传IP地址就要初始化日志。 重新初始化日志,起一个字段出来。

proxy_set_header X-Forwarded-For $remote_addr;

设置报头,将remote_addr赋值给X-Forwarded-For这个字段。开启这个字段前要进行日志格式化。

先不改动反向代理的配置文件,改webA的,然后再用反向代理去访问,看看设置的字段是否为空。

 

 

 

 

 

确认字段为空后,修改反向代理的配置文件,加上字段信息

 

用Windows客户端计算机去访问bbs.yunjisuan.com

 

空字段的位置就出现了IP地址,因为我是nat模式,所以IP是10.1.1.1

我们格式化日志的时候自然可以将空字段放到前面去。

 

 

推荐阅读