06月12, 2018

在有Nginx反向代理的服务器上获取用户真实IP

我的服务器是Nginx+Apache,PHP是在Apache下面跑的,我现在有PHP程序想要得到用户的真实IP地址。我使用$_SERVER['REMOTE_ADDR']来获取用户IP,但由于Nginx反向代理的存在,我获得的IP都是服务器的IP地址。

但Nginx有一些功能可以得到真实IP,把Nginx得到的REMOTE_ADDR以X-Real-IP的形式存放在header中。

具体来说,要在nginx配置文件中,加上proxy_set_header X-Real-IP $remote_addr;,这样header中就会有IP信息,Apache下的PHP就可以使用$_SERVER['HTTP_X_REAL_IP']获得IP了。

另外,Nginx还有个配置项叫做X-Forwarded-For,设置方法是proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,这是为多层转发准备的,它每经过一次转发,就会加上转发时的IP,用逗号隔开。

本文链接:https://debug.fanzheng.org/post/get-user-real-ip-in-nginx-behind-nginx-reverse-proxy.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。