X-Real-IP 是一个 HTTP 请求头部(header),用于识别通过 HTTP 代理或负载均衡器转发到后端服务器的原始客户端 IP 地址。
与 X-Forwarded-For 不同,``X-Real-IP` 通常只包含单个 IP 地址,即发起请求的客户端的真实 IP 地址。
对于支持 X-Forwarded-For 的代理服务器,它们通常会同时设置 X-Forwarded-For 和 X-Real-IP 头部。
在这种情况下,X-Forwarded-For 头部会包含完整的请求链中的 IP 地址列表,而 X-Real-IP 头部则只包含客户端的原始 IP 地址。这可以为后端服务器提供更多的上下文信息,以便进行更准确的访问控制和日志记录。
X-Forwarded-For
X-Forwarded-For 头部通常包含一个或多个 IP 地址,它们用逗号分隔。
第一个 IP 地址通常是发起请求的客户端的 IP 地址,随后的 IP 地址则代表请求所经过的代理或负载均衡器的 IP 地址。
例如,如果一个请求从客户端 IP 192.168.1.100 发出,并通过一个代理服务器 IP 192.168.2.1 转发到目标 web 服务器,那么 X-Forwarded-For 头部可能看起来像这样:
X-Forwarded-For: 192.168.1.100, 192.168.2.1
复制代码
获取IP地址的几种情况
X-Forwarded-For 和 HTTP_X_FORWARDED_FOR的情况基本上是一样的。
如果有多级代理,HTTP_X_FORWARDED_FOR / X-Forwarded-For 会包含一个 IP 地址列表,从左到右依次表示:
最左边:客户端的真实 IP。
中间:经过的代理服务器的 IP。
最右边:直接向目标服务器发起请求的代理 IP。
没有使用代理服务器的情况
REMOTE_ADDR:真实 IP 地址
HTTP_VIA:空
HTTP_X_FORWARDED_FOR:空
REMOTE_ADDR: 192.168.1.100
HTTP_VIA:
HTTP_X_FORWARDED_FOR:
复制代码
使用透明代理服务器的情况
REMOTE_ADDR:代理服务器 IP
HTTP_VIA:可能会包含代理服务器的信息
HTTP_X_FORWARDED_FOR:真实 IP 地址
REMOTE_ADDR: 203.0.113.1 (代理服务器的 IP 地址)
HTTP_VIA: 1.1 ProxyServer (说明请求经过了代理)
HTTP_X_FORWARDED_FOR: 192.168.1.100 (客户端的真实 IP 地址)
复制代码
使用普通匿名代理服务器的情况
REMOTE_ADDR:代理服务器 IP
HTTP_VIA:可能会包含代理服务器的信息
HTTP_X_FORWARDED_FOR:客户端的真实 IP 地址,但代理服务器可能会将这部分信息隐藏或替换为一个通用的 IP 地址。
REMOTE_ADDR: 203.0.113.1 (代理服务器的 IP 地址)
HTTP_VIA: 1.1 ProxyServer (说明请求经过了代理)
HTTP_X_FORWARDED_FOR: 203.0.113.1 (代理服务器的 IP 地址)
复制代码
使用欺骗性代理服务器的情况
REMOTE_ADDR:代理服务器 IP
HTTP_VIA:可能会包含代理服务器的信息,但可能经过修改以隐藏其真实身份。
HTTP_X_FORWARDED_FOR:可能包含一些毫无意义的或者伪造的 IP 信息,比如一个随机生成的 IP 地址9.9.9.9,这完全是为了误导目标服务器而设置的。
REMOTE_ADDR: 203.0.113.1 (代理服务器的 IP 地址)
HTTP_VIA: 1.1 ProxyServer (说明请求经过了代理)
HTTP_X_FORWARDED_FOR: 198.51.100.1 (伪造的 IP 地址)
复制代码
使用高匿名代理服务器的情况
REMOTE_ADDR:代理服务器 IP
HTTP_VIA:可能会包含代理服务器的信息,但很难通过这个信息追踪到代理服务器的真实身份。
HTTP_X_FORWARDED_FOR:为空或者不包含用户真实 IP 相关线索。与透明代理不同,高匿名代理不会通过这个字段泄露用户的真实 IP。