image.png

X-Forwarded-For

记录代理服务器的地址,每经过一个代理,该字段会加上一个记录,由于是记录来源地址,所以该字段不会保存最后一个代理服务器的地址。

  • 存储客户端Ip和反向代理服务器的Ip列表,以逗号 + 空格分隔。
  • 记录最后直连实际服务器之间的整个代理过程。
  • 可能会被伪造Ip,但是直连实际服务器这段不会伪造。

image.png

X-Real-IP

也是用来记录服务器的地址,但是和上面的不同,它不把记录添加到结尾,而是直接替换。

  • 请求实际服务器的 IP
  • 每过一层 代理都会被覆盖掉,只需第一层设置 代理
  • IP可以被伪造,但如果存在一级以上的 dai li,它就不会收到影响,因为每经过一次dai li,它就会被覆盖

image.png
第一层 代理 已经拿到了真实的 ip,并在 header 中设置了 X-Real-IP,因此第二层 代理不需要再去设置 X-Real-IP,只需要做转发就可以

remote_addr

表示上一个客户端连接的地址,不存在代理 就表示客户端的地址,存在 代理 就表示最后一个 代理 服务器的地址

  • remote_addr无法伪造,
  • remote_addr 字段不是通过请求头来决定的,而是服务端在建立tcp连接时获取的的客户端地址

可以这样理解,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求
Go 中可以通过 req.RemoteAddr 代码获取请求地址的 ip