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

Posted

技术标签:

【中文标题】来自用户而不是 Nginx 反向代理服务器的 REMOTE_ADDR IP【英文标题】:REMOTE_ADDR IP from user instead of Nginx reverse proxy server 【发布时间】:2017-10-24 01:10:17 【问题描述】:

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

我在我的 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】:

添加 http 配置 set_real_ip_from

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

【讨论】:

【参考方案2】:

访问者的 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;

【讨论】:

没错,只是我不想修改我的 Symfony2 源代码并保持该代码标准。 更改为您的示例并重置 Nginx 和 Apache 后,我仍然获得 Nginx IP 地址。 尝试按照以下步骤进行操作:***.com/a/8201447/3499277 proxy_set_header 主机 $http_host;获取始发港

以上是关于来自用户而不是 Nginx 反向代理服务器的 REMOTE_ADDR IP的主要内容,如果未能解决你的问题,请参考以下文章

由于 nginx 反向代理,无法获取用户 ip

谁能解释一下nginx反向代理是啥意思?

在带有协议升级的 nginx 反向代理后面运行 daphne 总是路由到 http 而不是 websocket

每日一学之Nginx系列NO.5反向代理

Nginx 反向代理+负载均衡

nginx反向代理