我正在运行用于静态文件的 Nginx 前端,并代理到用于 PHP 和 Passenger 的 Apache 后端,使用 Apache 的 mod_rpaf 在后端设置正确的远程 IP 地址。在我升级到 Ubuntu 12.04 (Precise) 之前,一切正常。现在 Apache 报告所有来自 127.0.0.1 的连接。
这是相关配置。升级后这里没有任何变化。
Nginx的:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
mod_rpaf:
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 ::1
RPAFheader X-Forwarded-For
</IfModule>
我正在使用%{X-Forwarded-For}i
我的 Apache LogFormat 指令,并且访问日志显示了正确的远程地址,所以我知道 Nginx 正在正确传递地址。
在phpinfo()
测试中,HTTP_X_FORWARDED_FOR 显示正确的远程地址,但 REMOTE_ADDR 是 127.0.0.1。这也反映在 PHP 应用程序中,例如 WordPress 评论。
我尝试将 Nginx 和 mod_rpaf 切换到 X-Real-IP,但没有效果。
是否有我忽视的改变?
相关版本信息,从 Ubuntu 存储库安装的所有内容:
Nginx 1.1.19
Apache 2.2.22
mod_rpaf 0.6
答案1
我自己也遇到过这个问题。周五确认有一个 Ubuntu 错误。您可以通过更改以下内容来恢复正常运行:
<IfModule mod_rpaf.c>
到
<IfModule mod_rpaf-2.0.c>
在 /etc/apache2/mods-available/rpaf.conf 中
答案2
mod_rpaf 似乎已在 Debian Jessie 中被弃用,并且进一步的开发已停止。请切换到 mod_remoteip,它是 Debian Jessie 中的默认模块。
答案3
只是对这个问题的更新。mod_rpaf 使用的变量的格式已更改 - Apache 目前将拒绝使用上面列出的变量(RPAFenable、RPAFsethostname、RPAFproxy_ips、RPAFheader)启动。
新格式如下:
LoadModule rpaf_module modules/mod_rpaf.so
RPAF_Enable On
RPAF_ProxyIPs 127.0.0.1 10.0.0.0/24
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
RPAF_ForbidIfNotProxy Off