我正在使用 mod-rpaf 和 Apache 2.4,它在我的 Apache access_log 中运行正常(显示真实客户端 IP),但在错误日志中却不行。我的错误日志只显示代理服务器(在本例中是我的负载均衡器)的客户端 IP 地址
这是我在 error_log 中看到的示例,其中 123.123.123.123 是我的负载均衡器/代理的 IP。
==> /usr/local/apache2/logs/error_log <== [2012 年 6 月 5 日星期二 20:24:31.027525] [access_compat:error] [pid 9145:tid 140485731845888] [客户端 123.123.123.123:20396] AH01797:服务器配置拒绝客户端:/wwwroot/private/secret.pdf
完全相同的请求在我的 456.456.456.456 中产生以下内容,access_log
其中 456.456.456 是真实的客户端 IP(而不是负载均衡器的 IP)。
456.456.456.456 - - [05/Jun/2012:20:24:31 +0000] "GET /wwwroot/private/secret.pdf HTTP/1.1" 403 228 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0"
这是我的 httpd.conf 条目:
# RPAF
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 127.0.0.1 123.123.123.123
RPAFsethostname On
RPAFheader X-Forwarded-For
我需要做什么才能让我的 Apache error_log 中显示真实的 IP 地址?
答案1
我认为错误日志格式看起来很奇怪,而且我认为在 2.2 中没有任何方法可以改变它,所以我检查了一下2.4 版文档。
似乎现在有一个ErrorLogFormat
指令,并且您的错误日志采用默认格式,该格式自 2.2 版以来已更新并得到显著改进。
Apache 2.4 现在包括mod_remoteip弃用了 mod_rpaf。我怀疑 mod_rpaf 尚未更新,无法与 Apache 2.4 和 ErrorLogFormat 指令配合使用。最新版本下载页面是 2008 年的。
在 Apache 2.4 中,您应该使用 mod_remoteip 而不是 mod_rpaf。
答案2
mod-rpaf 只需要对源代码进行微小的修改,就可以与 apache 2.4 一起工作,我在这里找到了 http://vova-zms.blogspot.com/2012/07/install-modrpaf-with-apache-24.html
只需 替换remote_
为client_
mod_rpaf-2.0.c
还http://blog.77jp.net/mod_rpaf-install-apache-2-4
在此处可视化简单的变化:https://gist.github.com/teriyakisan/2716030
mod-remoteip 实际上还不如 mod-rpaf 那么强大(目前)
github 上也有 mod-rpaf 的改进版本,比如这里https://github.com/y-ken/mod_rpaf/它具有 https 状态支持,并删除了一些旧版支持