
一、$remote_addr
表示发出请求的客户端主机的 IP 地址,但它的值不是由客户端提供的,而是Nginx与客户端进行TCP连接过程中,获得的客户端的真实地址 IP 地址,REMOTE_ADDR 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。
当你的浏览器访问某个网站时:
- 假设中间没有任何代理,那么网站的
Web服务器(Nginx,Apache等)获取的remote_addr为你的机器IP。 - 如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样
Web服务器获取的remote_addr为代理机器的IP。
二、$X-Real-IP
X-Real-IP是一个自定义Header。X-Real-Ip 通常被 HTTP 代理用来表示与它产生 TCP 连接的设备 IP,这个设备可能是其他代理,也可能是真正的请求端。需要注意的是,X-Real-Ip