自 Apache 以来2.4我已经开始使用mod_remoteip代替mod_extract_forwarded用于重写客户端地址x-转发-for由前端服务器(varnish、squid、apache 等)提供。
到目前为止,模块(即 php、cgi、wsgi 等)运行正常……客户端地址显示正常,但我无法在访问日志中写入客户端地址(%a、%h、%{c}a)。运气不好——我总是得到 127.0.0.1(localhost 转发示例)。
使用 mod_remoteip 时如何记录客户端的 IP 地址?
更新:它有效O_O- 请参阅下面的答案
答案1
清漆配置:
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.4配置部分:
mod_remoteip:
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8
日志记录(%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;
}
}
答案2
根据mod_remoteip 的文档,模块应该只是替换客户端IP地址,但只有当RemoteIPHeader x-forwarded-for
设置时(文档)。还要确保您的 vhost 的日志记录使用您定义的 CustomLog。