来自用户的REMOTE_ADDR IP而不是Nginx反向代理服务器

时间:2017-05-23 21:55:04

标签: php apache nginx proxy

我已经阅读了很多关于这个主题的帖子,并尝试了几种解决方案,但没有找到工作时间。

我在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;
}

帮助表示赞赏?

2 个答案:

答案 0 :(得分:5)

访问者的IP地址应该可以使用

访问
$_SERVER['HTTP_X_REAL_IP'];

而不是

$_SERVER['REMOTE_ADDR'];

如果要替换REMOTE_ADDR标题,请在NGINX配置中尝试:(不要忘记重新加载/重启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;
}

答案 1 :(得分:0)

添加 http 配置 set_real_ip_from

http {
...
set_real_ip_from 172.19.0.5/16 # ip of Nginx server;