我正在尝试使用 Require ip XXXX 在 Apache 2.4 上配置 .htaccess
我遇到的问题是,所有请求似乎都来自 127.0.0.1,而不是请求的公共 IP。我通过在线搜索发现,这可能是由于服务器上的缓存或代理造成的。
服务器是 OS X Server,当我在服务器上被禁止时,日志显示我的请求来自 127.0.0.1 - 但我肯定不在本地主机上。Apache 是否有任何可能导致这种情况的此类代理?
我找到的答案是:
- 在服务器管理 -> Web -> 设置 -> 网站 -> 选项中关闭性能缓存 这充当 Apache 前面的代理服务器,以提高某些文件的性能。但是,一个副作用是 Apache 看到的是代理服务器的 IP 地址,而不是用户的 IP 地址。性能缓存或远程 IP 地址。选一个。你不能同时拥有
答案1
您可能已经解决了这个问题。不确定您运行的是哪个版本的 OSX 服务器,但您正确地假设这是代理问题。对我有用的是编辑 httpd_server_app.conf 文件。在 IfModule log_config_module 部分中,您会找到日志记录格式。
这是需要编辑的一个:
LogFormat "%v %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedvhost
如果你把它改成这样:
LogFormat "%v %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedvhost
它应该可以修复它。
编辑:
后来我发现了一个更好的解决方案。与其在 httpd_server_app.conf 文件中弄乱日志格式,
如果您将其添加/编辑到 httpd_server_app.conf 文件:
<IfModule remoteip_module>
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
</IfModule>
这会将上游内部代理添加为受信任的源,然后将正确的客户端地址填入 remoteaddress。所有默认的 apache 日志格式都会显示正确的地址。此方法的另一个优点是您可以运行 mod_status (server-status),它会在其报告中显示正确的客户端地址。