温馨提示×

nginx日志中的X-Forwarded-For有何作用

小樊
68
2025-04-16 12:14:26
栏目: 编程语言

X-Forwarded-For 是一个 HTTP 头部字段,用于记录客户端 IP 地址。在 Nginx 服务器中,它通常用于获取客户端的真实 IP 地址,特别是在使用了反向代理(如负载均衡器、CDN 或其他代理服务器)的情况下。

当请求经过多个代理服务器时,每个代理服务器都会在请求头中添加自己的 IP 地址。X-Forwarded-For 字段会包含一个逗号分隔的 IP 地址列表,其中第一个 IP 地址是客户端的真实 IP 地址,后续的 IP 地址则是经过的代理服务器的 IP 地址。

例如,当一个请求从客户端发送到 Nginx 服务器,然后经过两个代理服务器 A 和 B,最终到达 Nginx 服务器时,Nginx 日志中的 X-Forwarded-For 字段可能如下所示:

X-Forwarded-For: 192.168.1.1, 10.0.0.1, 172.16.0.1 

在这个例子中,192.168.1.1 是客户端的真实 IP 地址,10.0.0.1 是代理服务器 A 的 IP 地址,172.16.0.1 是代理服务器 B 的 IP 地址。

要正确记录客户端的真实 IP 地址,需要在 Nginx 配置文件中使用 $http_x_forwarded_for 变量。例如,可以将以下配置添加到 Nginx 配置文件中,以便在访问日志中记录客户端的真实 IP 地址:

log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; 

需要注意的是,X-Forwarded-For 头部字段可以被伪造,因此不建议将其用于安全相关的场景。

0