我有一个 Apache 2.4 和 PHP 5.4 应用程序,大量使用了SERVER['REMOTE_ADDR']
。
基础设施正在经历变革,最近我们部署了一个充当反向代理的 Nginx。代理正确添加了X-Real-IP
和X-Forwarded-For
标头,均显示真实的客户端 IP。为了便于移植,我们还将 Apache/PHP 应用程序和 Nginx 代理都容器化了。它们部署在两个不同的主机上,通过外部 IP 相互通信(将来将更改为私有网络)。
我无法修改应用程序,但我可以修改 Apache 配置。
我已启用 remoteip 模块,它是 mod_rpaf 的替代品。我尝试了几种配置,例如:
RemoteIPProxiesHeader X-Forwarded-For
RemoteIPInternalProxy <external ip of the proxy>
或者
RemoteIPProxiesHeader X-Forwarded-For
RemoteIPTrustedProxy <external ip of the proxy>
以及一些~Proxy
变量的组合。
无论如何,运行时phpinfo()
我得到以下输出:
HTTP_X_REAL_IP <my real client ip>
HTTP_X_FORWARDED_FOR <my real client ip>
SERVER_ADDR <the Apache/PHP docker machine's ip>
REMOTE_ADDR <external ip of the proxy>
关于如何正确配置 remoteip 模块有什么想法吗?
答案1
Apache 2.4 附带的 remoteip 模块似乎不起作用。我从 Github 上获取了 mod_rpaf 的最新稳定版本 (v0.8.4)。编译并安装,修改默认配置如下:
<IfModule mod_rpaf.c>
RPAF_Enable On
RPAF_ProxyIPs <external ip of the proxy>
RPAF_Header X-Forwarded-For
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
</IfModule>
而且效果非常好。