从Apache 2.4开始,我已经开始使用mod_remoteip而不是mod_extract_forwarded来重写前端服务器(varnish,squid,apache等)提供的来自x- forward的客户端地址。
到目前为止,一切工作正常与模块,即PHP,CGI,WSGI等… – 客户端地址显示为他们应该是,但我不能在访问日志(%a,%h,%{c }一个)。 没有运气 – 我总是得到127.0.0.1(localhost forward ex。)。
如何使用mod_remoteiplogin客户端的IP地址?
更新: IT WORKS O_O – 请参阅下面的答案
清漆configuration:
if (req.restarts == 0) { if (req.http.X-Forwarded-For) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } }
apache 2.4configuration部分:
mod_remoteip:
RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 127.0.0.1/8
日志logging(%a做这项工作):
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+
如果前面有一个nginx(例如SSL终止):
server { listen 123.123.123.123:443; server_name server.com; root html; ssl on; ssl_certificate /etc/pki/httpd/site/chain.crt; ssl_certificate_key /etc/pki/httpd/site/private.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:6081; proxy_set_header Host $http_host; proxy_pass_header Server; proxy_set_header X-Forwarded-For $remote_addr; } }
根据mod_remoteip的文档 ,模块应该简单地replace客户端IP地址,但是只有当RemoteIPHeader x-forwarded-for被设置( doc )时。 另外请确保您的虚拟主机日志logging使用您定义的CustomLog。