$http_x_forwarded_for
$http_x_forwarded_for 变量包含来自客户端请求的 X-Forwarded-For 头的值,该值指示发起请求的客户端的原始 IP 地址。 — NGINX Core (HTTP)
$http_x_forwarded_for
NGINX Core (HTTP)
说明
$http_x_forwarded_for 变量在 NGINX 中用于提取 X-Forwarded-For HTTP 头的值,该头通常由请求链中的代理添加以指示客户端的源 IP 地址。当请求经过一个或多个代理时,原始客户端的 IP 地址会被包含在此头中,从而使下游服务器能够获取该信息。它可以包含单个 IP 地址,或以逗号分隔的 IP 列表,表示客户端地址以及处理请求的后续代理。 通常,X-Forwarded-For 头的值会看起来像这样:"203.0.113.195"(示例为直接 IP),如果存在代理则可能是 "203.0.113.195, 198.51.100.0"。在配置 NGINX 时,可以在访问日志、条件配置或安全检查中使用此变量,以根据客户端的原始地址允许或拒绝访问。重要的是确保任何配置正确处理收到的头值,尤其是在请求链中存在多个代理时,以避免错误地识别客户端的 IP。 NGINX 仅在客户端发送了 X-Forwarded-For 头时才会设置此变量。在有多个后端服务器需要确定真实客户端 IP 的负载均衡环境中,这个变量尤其有用。用户应注意,如果没有采取适当的安全措施,该头很容易被伪造,因此在安全相关的场景中需要对其进行验证。
配置示例
http {
log_format custom '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "http://$http_x_forwarded_for"';
access_log /var/log/nginx/access.log custom;
server {
listen 80;
server_name example.com;
location / {
# Use $http_x_forwarded_for for access control
if ($http_x_forwarded_for ~* '203.0.113.195') {
return 403;
}
proxy_pass http://backend_servers;
}
}
}子系统
http可缓存
是上下文
http, server, location, if⚠
确保 X-Forwarded-For 头由您的代理正确设置;否则,该变量可能包含意外值。
⚠
由于该头部可以轻易伪造,在依赖此头做出安全决策时,应实施适当的验证并仅信任已知代理。
⚠
考虑到在该头中可能收到多个 IP 地址;解析它们可能增加复杂性。