针对nginx的模块介绍可以查阅wiki:http://wiki.nginx.org/Modules
常用模块:HTTP Core
原理:
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配置文件中:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Real-IP}i %l %u %t %D "%r" %s %b" />
转载于:https://blog.51cto.com/wushank/1678370