2017-05-23 119 views
0

我已经阅读了很多关于此主题的文章,并尝试了几种解决方案,但没有找到工作流畅的解决方案。REMOTE_ADDR来自用户的IP,而不是Nginx反向代理服务器

我已经在我的Apache服务器前设置了一个Nginx反向代理。当我的php应用程序使用REMOTE_ADDR函数时,它获取Nginx服务器的IP而不是用户。

我正在使用Apache 2.4.10,所以应该安装module_remoteip.c。但它没有加载。

因此我安装了rpaf_module。它看起来像这个模块安装正确,phpinfo()mod_rpaf-2显示与加载模块。在我修改了/etc/apache2/mods-available/rpaf.conf文件,内容如下:

<IfModule rpaf_module> 
    RPAFenable On 
    RPAFsethostname On 
    RPAFproxy_ips 172.19.0.5 # ip of Nginx server 
    RPAFheader X-Forwarded-For 
</IfModule> 

我的Nginx的配置是这样的:

location/{ 
    proxy_set_header X-Real-Ip $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $host; 
    proxy_pass 172.19.0.4; 
} 

帮助表示赞赏?

回答

1

访问者的IP地址,应该使用

$_SERVER['HTTP_X_REAL_IP']; 

,而不是

$_SERVER['REMOTE_ADDR']; 

可以访问如果您想更换REMOTE_ADDR头,试试这个在您的NGINX配置:(和Don” t忘记重新加载/重启你的NGINX服务器)

location/{ 
    proxy_set_header X-Real-Ip $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $host; 
    proxy_set_header REMOTE_ADDR $remote_addr; 
    proxy_pass 172.19.0.4; 
} 
+0

这是正确的,只有我不想修改我的Symfony2源代码并保持该代码标准。 – Tom

+0

@Tom我更新了我的答案。 – thepieterdc

+0

更改为示例并重置Nginx和Apache后,我仍然获得Nginx IP地址。 – Tom

相关问题