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
頭部字段可以被偽造,因此不建議將其用于安全相關的場景。