X-Forwarded-For
是一个 HTTP 头部字段,用于记录客户端 IP 地址。当请求通过代理服务器(如 Nginx)转发到后端服务器时,原始客户端的 IP 地址可能会被隐藏。X-Forwarded-For
头部字段可以帮助我们获取原始客户端的 IP 地址。
在 Nginx 配置文件中,可以使用 $http_x_forwarded_for
变量来访问 X-Forwarded-For
头部字段的值。以下是一些使用 X-Forwarded-For
的示例:
- 将客户端 IP 地址记录到访问日志中:
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;}
- 在后端服务器中获取客户端 IP 地址:
在 PHP 中:
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'];
在 Node.js 中:
const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
- 设置
X-Forwarded-For
头部字段:如果你需要在 Nginx 中设置 X-Forwarded-For
头部字段,可以使用 proxy_set_header
指令:
location / {proxy_pass http://backend_server;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
这将把原始客户端的 IP 地址添加到 X-Forwarded-For
头部字段中,并将其转发到后端服务器。
注意:X-Forwarded-For
头部字段可以被客户端伪造,因此不建议在安全性要求较高的场景中使用。在这种情况下,可以考虑使用其他方法来获取客户端 IP 地址,例如使用 REMOTE_ADDR
变量或者配置身份验证机制。