问题描述
在配置 Nginx 反向代理时,我们经常被 X-REAL-IP、X-Forwarded-For 等等头部,搞得晕头转向。再比如,在多层反向代理环境中,传递客户端真实网络地址的问题。
该笔记将记录:学习与 HTTP 反向代理有关的头部。
解决方案
Forwarded
透露“通过代理连接服务器的”客户端的原始信息。
例如:Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
X-Forwarded-For
标识“通过代理或者负载均衡连接到服务器的”客户端的原始网络地址。(被 Forwarded 标头取代,但依旧在使用)
例如:X-Forwarded-For: client1, proxy1, proxy2 / X-Forwarded-For: 129.78.138.66, 129.78.64.103
X-Forwarded-Host
标识客户端请求的原始主机(头部 Host 字段)。因为代理或者负载均衡可能使用不同的主机,比如多级代理转发。(被 Forwarded 标头取代,但依旧在使用)
例如:X-Forwarded-Host: en.wikipedia.org:8080 / X-Forwarded-Host: en.wikipedia.org
X-Forwarded-Proto
标识客户端请求的原始协议,因为代理服务器可能用 HTTP 请求目标服务器,即使原始请求使用 HTTPS 协议。(被 Forwarded 标头取代,但依旧在使用)
例如:X-Forwarded-Proto: https
Max-Forwards
限制消息可通过代理转发的最大次数。
例如:Max-Forwards: 10
X-REAL-IP
在 RFC 中,我们没有看到 X-REAL-IP 头部的说明,但是其他文档中提到,该字段记录客户端的真实网络地址。
例如:X-Real-IP: 192.168.0.10
相关链接
参考文献
List of HTTP header fields
HTTP "X-" Headers
Is sending "X-Real-IP" and "X-Forwarded-For" necessary for an Nginx cache running on LAN? - Server Fault