在Apache位于反向代理(例如Squid)之后的情况下,cgi环境变量REMOTE_ADDR将获取代理的地址,而不是客户端的地址。
但是,代理将设置一个名为X-Forwarded-For的头来包含客户端的原始IP地址,以便Apache可以看到它。
问题是,我们如何让Apache将REMOTE_ADDR替换为X-Forwarded-For头中的值,以便所有web应用程序都能透明地看到正确的地址?
发布于 2010-08-07 01:22:34
为此,您可以使用mod_rpaf。http://stderr.net/apache/rpaf/
发布于 2012-04-27 14:53:59
注意,如果请求已经遍历了多个代理,则X-Forwarded-For报头可以包含IP地址的列表。在这种情况下,您通常需要最左边的IP。您可以使用SetEnvIf解压缩以下内容:
SetEnvIf X-Forwarded-For "^(\d{1,3}+\.\d{1,3}+\.\d{1,3}+\.\d{1,3}+).*" XFFCLIENTIP=$1注意,使用$1设置XFFCLIENTIP环境变量以保存正则表达式中第一个组的内容(在括号中)。
然后,您可以使用环境变量的值来设置标头(或者以Apache日志格式使用它,以便日志包含实际的客户端IP)。
发布于 2019-03-19 01:14:45
目前,apache模块mod_remoteip是推荐的方法;rpaf还没有得到可靠的维护,可能会导致问题。
https://stackoverflow.com/questions/2247352
复制相似问题