我最近使用Apache和NGINX反向代理切换到VestaCP。很快我注意到所有传入的流量都被记录为服务器IP地址。这是因为Apache只看到NGINX代理服务器的IP地址,这是我自己的服务器IP。
使用phpinfo()
,我可以验证客户端IP是否在HTTP_X_FORWARDED_FOR
和HTTP_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']
的框架。
1条答案
按热度按时间y3bcpkx11#
为了让它工作,我做了以下事情:
1.我使用以下命令安装了Apache
remoteip
模块:字符串
1.在
/etc/nginx/nginx.conf
中,我确保在http {}
块中添加了以下行型
1.然后,我根据Apache文档将以下代码块添加到
/home/admin/conf/web/sitename.apache2.conf
中型
确保NGINX(步骤2)和Apache(步骤3)都使用完全相同的变量名
X-Client-IP
似乎已经做到了这一点。现在,它使用转发的客户端IP地址正确地填充了
REMOTE_ADDR
。