使用NGINX代理时,如何在PHP Apache的REMOTE_ADDR中获取真实的客户端IP?

ff29svar  于 11个月前  发布在  Nginx
关注(0)|答案(1)|浏览(136)

我最近使用Apache和NGINX反向代理切换到VestaCP。很快我注意到所有传入的流量都被记录为服务器IP地址。这是因为Apache只看到NGINX代理服务器的IP地址,这是我自己的服务器IP。
使用phpinfo(),我可以验证客户端IP是否在HTTP_X_FORWARDED_FORHTTP_X_REAL_IP中正确转发,但它没有正确添加到REMOTE_ADDR
我已经尝试通过在NGINX配置文件中添加以下内容来确保IP从NGINX正确转发到Apache:

fastcgi_param REMOTE_ADDR $http_x_real_ip;

字符串

proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;


这绝对是正确的方向,因为我可以看到值$_SERVER['HTTP_X_REAL_IP']显示正确的IP地址。然而,这似乎对$_SERVER['REMOTE_ADDR']没有任何作用。
我还遇到了一些其他模糊的建议,如手动设置IP地址,但这从来没有做任何事情:

set_real_ip_from   192.168.122.1;


我不能简单地使用$_SERVER['HTTP_X_REAL_IP'],因为我使用的是一个硬编码为使用$_SERVER['REMOTE_ADDR']的框架。

y3bcpkx1

y3bcpkx11#

为了让它工作,我做了以下事情:
1.我使用以下命令安装了Apache remoteip模块:

sudo a2enmod remoteip &&  systemctl restart apache2

字符串
1.在/etc/nginx/nginx.conf中,我确保在http {}块中添加了以下行

proxy_set_header    X-Client-IP       $remote_addr;


1.然后,我根据Apache文档将以下代码块添加到/home/admin/conf/web/sitename.apache2.conf

<IfModule mod_remoteip.c>
RemoteIPHeader X-Client-IP
</IfModule>


确保NGINX(步骤2)和Apache(步骤3)都使用完全相同的变量名X-Client-IP似乎已经做到了这一点。
现在,它使用转发的客户端IP地址正确地填充了REMOTE_ADDR

相关问题