那为什么 Web 做事器只有通过 X-Forwarded-For 头才能获取真实的 IP?
这里用 PHP 措辞来解释,不明白事理的开拓者为了获取客户 IP,会利用 $_SERVER['REMOTE_ADDR'] 变量,这个做事器变量表示和 Web 做事器握手的 IP 是什么(这个不能假造)。
但是很多用户都通过代理来访问做事器的,那么如果利用该全局变量,PHP获取到的 IP 便是代理做事器的 IP(不是用户的)。

可能很多人看的晕乎乎的,那么看看一个要求可能经由的路径:客户端=>(正向代理=>透明代理=>做事器反向代理=>)Web做事器。个中正向代理、透明代理、做事器反向代理这三个环节并不一定存在。
什么是正向代理呢,很多企业会在自己的出口网关上设置代理(紧张是为了加速和节省流量)。
透明代理可能是用户自己设置的代理(比如为了FQ,这样也绕开了公司的正向代理)。
做事器反向代理是支配在 Web 做事器前面的,紧张缘故原由是为了负载均衡和安全考虑。
现在假设几种情形:
如果客户端直接连接 Web 做事器(假设 Web 做事器有公网地址),则 $_SERVER['REMOTE_ADDR'] 获取到的是客户真个真实 IP 。
假设 Web 做事器前支配了反向代理(比如 Nginx),则 $_SERVER['REMOTE_ADDR'] 获取到的是反向代理设备的 IP(Nginx)。
假设客户端通过正向代理直接连接 Web 做事器(假设 Web 做事器有公网地址),则 $_SERVER['REMOTE_ADDR'] 获取到的正向代理设备的 IP 。
实在这里的知识点很多,记住一点就行了,$_SERVER['REMOTE_ADDR'] 获取到的 IP 是 Web 做事器 TCP 连接的 IP(这个不能假造,一样平常 Web 做事器也不会修正这个头)。
利用方法
在火狐浏览器的附加组件中搜索X-Forwarded-For,点击安装后重启浏览器即可。可直接在插件中修正IP。