X-Forwarded-For 是一个 HTTP 头部字段,用于记录通过 HTTP 代理或负载均衡器连接到 Web 服务器的客户端的原始 IP 地址。当请求经过多个代理时,X-Forwarded-For 的值会包含一个 IP 地址列表,每个 IP 地址代表一个跳点。
在 Nginx 中,你可以使用 $http_x_forwarded_for 变量来访问这个字段的值。以下是一些使用 X-Forwarded-For 的示例:
http {
log_format custom '$http_x_forwarded_for - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log custom;
}
在这个例子中,我们创建了一个自定义的日志格式,其中包含了 $http_x_forwarded_for 变量。这样,访问日志中将记录客户端的原始 IP 地址,而不是经过代理的 IP 地址。
location / {
proxy_set_header X-Real-IP $http_x_forwarded_for;
proxy_pass http://backend;
}
在这个例子中,我们使用 proxy_set_header 指令将 $http_x_forwarded_for 变量的值设置为 X-Real-IP 请求头。这样,后端服务器就可以通过检查 X-Real-IP 请求头来获取客户端的原始 IP 地址。
注意:在使用 X-Forwarded-For 时,要确保信任的代理服务器正确设置此字段。否则,恶意用户可能会伪造 IP 地址。为了防止这种情况,你可以使用 X-Forwarded-Proto 和 X-Forwarded-Host 等其他字段来验证请求的来源。