在实际生产环境中,应用通过反向代理想获取请求真实ip地址需要对web服务器增加一些配置来实现。如zcms应用中采用nginx作为web服务器常常需要加入以下参数:

但是在存在web服务器负载均衡的情况下,往往需要需要更多的配置来保证X-Real-IP在不同的Web服务器之间传输处理。

如下场景:

    服务器A: nginx(负载均衡 ip 192.168.1.10)

    服务器B: ningx(web节点1 ip 192.168.1.11) 

    服务器C: ningx(web节点2 ip 192.168.1.12) 

    服务器D: ningx(web节点3 ip 192.168.1.13) 

    服务器E: tomcat(应用) 

    服务器A负载前台请求分别发送到服务器B、C、D.而服务器B、C、D反向代理动态引用到服务器E。

现在要求服务器E上的应用能正确的获取前台IP访问的请求。

在这样的场景中,我们需要借助nginx的http_realip_module来实现web服务器转发,在nginx编译加入http_realip_module模块,并对对应的http、server、location中加入以下参数:

其中set_real_ip_from可以指定某个网段。

服务器A,B,C,D均要加入"proxy_set_header"来传递真实ip,服务器B,C,D要加入上面的参数来设置如何获取真实IP.(默认编译的nginx是没有加入http_realip_module的,需要自己手动加入编译配置)


如何加入http_relip_module?

 以tengine为例: 

 

其他负载均衡服务器又如何传递真实IP呢?

  F5上配置X-Forwarded-For,具体参考官方配置https://support.f5.com/kb/en-us/solutions/public/4000/800/sol4816.html