简介
X-Forwarded-For 是一个 HTTP 扩展头部,主要是为了让 Web 服务器能够获取到客户端真实的 ip。(可以被伪造,客户端发送请求时可以 override 这个请求头)
REMOTE_ADDR 表示与服务器进行 TCP 连接的 IP,这个值不能够被伪造。(TCP 连接会经过三次握手,如果伪造了,便没有后续的请求)
Remote addr
首先我们来看一个请求在到达服务端之前可能出现的路径。
客户端->(正向代理->透明代理->反向代理->)web 服务器
其中正向代理、透明代理和反向代理不一定存在。首先解释下这三个概念:
- 正向代理:很多企业会在自己的出口网关上设置代理(主要是为了加速和节省流量)
- 透明代理:可能是用户自己设置的代理(比如为了翻墙,这样也绕开了公司的正向代理)
- 反向代理:一般部署在 Web 服务器前面的,主要原因是为了负载均衡和安全考虑。
现在假设以下几种情况下,Remote Addr 的值是什么:
- 客户端直连 Web 服务器,则 Remote Addr 获取到的是客户端真实的 ip
- web 服务器部署了反向代理(如 nginx),则 Remote Addr 获取的是反向代理设备的 ip(nginx)
- 客户端通过正向代理直连 web 服务器,则 Remote Addr 获取到的是