Apache mod_remoteip 和访问日志

Gio*_*Mac 10 load-balancing x-forwarded-for apache-2.2

从 Apache 2.4开始,我开始使用mod_remoteip而不是mod_extract_forwarded来重写来自前端服务器(varnish、squid、apache 等)提供的x-forwarded-for 的客户端地址。

到目前为止,所有模块都可以正常工作,即 php、cgi、wsgi 等...... - 客户端地址显示为它们应有的样子,但我无法在访问日志中写入客户端地址(%a、%h、%{c }一种)。不走运 - 我总是得到 127.0.0.1(本地主机转发前)。

使用mod_remoteip时如何记录客户端的IP地址?

更新:IT WORKS O_O - 请参阅下面的答案

Gio*_*Mac 21

清漆配置:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

apache 2.4 配置部分:

mod_remoteip:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8
Run Code Online (Sandbox Code Playgroud)

日志记录(%a 完成工作):

LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Run Code Online (Sandbox Code Playgroud)

+

如果前面有一个 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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Sga*_*uuw 5

根据mod_remoteip 的文档,该模块应该简单地替换客户端 IP 地址,但仅在RemoteIPHeader x-forwarded-for设置时进行(doc)。另请确保您的虚拟主机的日志记录使用您定义的 CustomLog。