针对nginx的模块介绍可以查阅wiki:http://wiki.nginx.org/Modules

    常用模块:HTTP Core

                     Proxy

                     Rewrite

                     Upstream

 

原理:
squid,varnish以及nginx等,在做反向代理的时候,因为要代替客户端去访问服务器,所以,当请求包经过反向代理后,在代理服务器这里这个IP数据包的IP包头做了修改,最终后端web服务器得到的数据包的头部的源IP地址是代理服务器的IP地址,这样一来,后端服务器的程序给予IP的统计功能就没有任何意义,所以在做代理或集群的时候必须解决这个问题,这里,我以nginx做集群或代理的时候如何给后端web服务器保留(确切的说是传递)客户端的真实IP地址。


首先,在前端nginx上需要做如下配置:

location / {
proxy_pass http://192.168.100.100;
proxy_set_header host $host;
proxy_set_header X-Real-IP $remote_addr;
};


在后端192.168.100.100的apache服务器上配置文件进行如下修改。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

改为

LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

即可。


tomcat中的Java代码修改如下

out.println(“X-Real-IP : ” + request.getHeader(“X-Real-IP”) + “<br>”); 

其中X-Real-IP即用户真实IP

tomcat    server.xml配置文件中:

  1. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  

  2.        prefix="localhost_access_log." suffix=".txt"  

  3.        pattern="%{X-Real-IP}i %l %u %t %D "%r" %s %b" />