![当 Apache/PHP 服务器位于 Nginx 反向代理之后时,如何使用 Apache remoteip 重写它收到的远程地址?](https://linux22.com/image/704864/%E5%BD%93%20Apache%2FPHP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BD%8D%E4%BA%8E%20Nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E4%B9%8B%E5%90%8E%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Apache%20remoteip%20%E9%87%8D%E5%86%99%E5%AE%83%E6%94%B6%E5%88%B0%E7%9A%84%E8%BF%9C%E7%A8%8B%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我有一个 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>
而且效果非常好。