我正在为静态文件运行Nginx前端,并使用Apache的mod_rpaf在PHP和Passenger上代理Apache后端,在后端设置正确的远程IP地址。 一切工作正常,直到我升级到Ubuntu 12.04(精确)。 现在Apache报告来自127.0.0.1的所有连接。
这是相关的configuration。 这里没有什么改变与升级。
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>
我在我的Apache LogFormat指令中使用了%{X-Forwarded-For}i ,并且访问日志显示了正确的远程地址,所以我知道Nginx正确地传递了地址。
在phpinfo()testing中,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
刚刚处理这个自己。 周五确认了一个Ubuntu bug。 您可以通过更改来重新开始工作:
<IfModule mod_rpaf.c>
至
<IfModule mod_rpaf-2.0.c>
在/etc/apache2/mods-available/rpaf.conf中
Debian Jessie似乎已经弃用了mod_rpaf,并且进一步的开发停止了。 切换到mod_remoteip,它是Debian Jessie中的默认模块。
只是对这个问题的更新。 mod_rpaf使用的variables的格式已经改变了–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