以下是一些可以获取真实 IP 的请求头及相关说明:
- X-Forwarded-For :是一个常见的请求头,用于识别经过代理服务器后原始客户端的 IP 地址。其值是一个逗号分隔的 IP 地址列表,第一个 IP 地址通常是客户端的真实 IP,后续 IP 地址则是请求经过的代理服务器的 IP。例如,
X-Forwarded-For: client1, proxy1, proxy2
,其中 client1 是原始客户端的 IP,proxy1 和 proxy2 分别是中间代理服务器的 IP 地址。但需要注意,X-Forwarded-For
头信息可被客户端伪造,因此在使用时需进行验证,如仅信任来自特定可信代理的该头信息。 - X-Real-IP :该请求头用于传递客户端的真实 IP 地址,与
X-Forwarded-For
不同,X-Real-IP
通常由反向代理服务器如 Nginx 设置,客户端无法直接修改它,从而提高了安全性。一般只包含一个 IP 地址,表示原始客户端的 IP。不过,如果存在多级代理,且后面的代理也设置了X-Real-IP
,则会覆盖前面的值,所以需在第一个代理服务器上正确设置该头信息,并确保后续代理不对其进行篡改。 - True-Client-IP :是 Cloudflare 提供的一个请求头,用于获取客户端真实 IP 地址。当网站所有流量都通过 Cloudflare 过滤时,可使用此头来获取用户的真实 IP,其优先级高于
X-Forwarded-For
。 - CF-Connecting-IP :也是 Cloudflare 提供的用于获取真实 IP 的请求头字段,当 Cloudflare 的代理服务器与客户端建立连接时,会将客户端的真实 IP 地址放入此字段。
- X-Cluster-Client-IP :有些应用程序服务器或中间件在经过负载均衡或集群环境后,可能会使用该请求头来传递客户端的真实 IP 地址。
- X-Forwarded :其值通常是一个逗号分隔的列表,包含了客户端 IP 地址以及请求经过的中介服务器的 IP 地址,格式与
X-Forwarded-For
类似,可用于获取客户端真实 IP,但同样可能存在伪造风险。 - X-Forwarded-Host :可用来传递原始请求中的 Host 请求头信息,虽然不能直接提供客户端 IP,但在某些复杂请求转发场景下,与 IP 相关的请求头一起,有助于更准确地识别和定位客户端请求的相关信息。
- X-Forwarded-Proto :用于告知服务器原始请求所使用的协议,如 HTTP 或 HTTPS。虽然它本身不包含 IP 信息,但在处理不同协议的请求转发时,与 IP 相关的请求头结合,可帮助服务器更全面地了解客户端请求的上下文,从而更准确地进行相应的处理和安全策略制定。
需要注意的是,仅依赖请求头来获取真实 IP 存在风险,因为某些请求头如 X-Forwarded-For
可被客户端伪造。以下是一些更可靠的获取真实 IP 的方法和注意事项:
- 使用 TCP 连接中的 Remote Address :对于直接与客户端建立 TCP 连接的服务器,通过编程语言提供的相关 API 或函数获取 TCP 连接中的远程地址,即
Remote Address
,这是客户端与服务器建立连接时的 IP 地址,无法被伪造,是最可靠的真实 IP 获取方式。 - 结合 CDN 服务 :如果网站使用了 CDN 服务,可参考 CDN 服务商提供的文档,使用其特定的获取真实 IP 的方法和接口。例如,Cloudflare 的
CF-Connecting-IP
、Akamai 的True-Client-IP
等。 - 配置反向代理服务器 :在 Nginx 等反向代理服务器中,正确配置
proxy_set_header
指令,将客户端的真实 IP 地址传递给后端服务器,如设置proxy_set_header X-Real-IP $remote_addr;
和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
等,并在后端服务器中合理解析这些头信息来获取真实 IP。 - 使用专业模块或工具 :如 Nginx 的
nginx_http_realip_module
模块,通过设置set_real_ip_from
和real_ip_header
指令,可指定可信的代理服务器 IP 地址,并告知 Nginx 使用哪个请求头中的 IP 地址作为客户端的真实 IP,从而有效防止 IP 伪造。 - 日志分析 :有时通过分析服务器日志也可以获取到真实的客户端 IP 地址,许多日志管理工具和平台如 ELK Stack、Splunk 等,提供了强大的日志分析功能,可帮助从日志中提取有价值的信息,包括 IP 地址。
- 验证 IP 的可信度 :对于从请求头中获取的 IP 地址,尤其是
X-Forwarded-For
等可能被伪造的头信息中的 IP,要进行可信度验证。例如,检查 IP 是否来自可信的代理服务器、CDN 节点或自己的网络基础设施等,可通过维护一个可信 IP 白名单,只信任来自这些 IP 的请求头中的 IP 信息,来提高获取真实 IP 的准确性。