以下是一些可以獲取真實 IP 的請求頭及相關說明:
- X-Forwarded-For :是一個常見的請求頭,用于識別經(jīng)過代理服務器后原始客戶端的 IP 地址。其值是一個逗號分隔的 IP 地址列表,第一個 IP 地址通常是客戶端的真實 IP,后續(xù) IP 地址則是請求經(jīng)過的代理服務器的 IP。例如,
X-Forwarded-For: client1, proxy1, proxy2
,其中 client1 是原始客戶端的 IP,proxy1 和 proxy2 分別是中間代理服務器的 IP 地址。但需要注意,X-Forwarded-For
頭信息可被客戶端偽造,因此在使用時需進行驗證,如僅信任來自特定可信代理的該頭信息。 - X-Real-IP :該請求頭用于傳遞客戶端的真實 IP 地址,與
X-Forwarded-For
不同,X-Real-IP
通常由反向代理服務器如 Nginx 設置,客戶端無法直接修改它,從而提高了安全性。一般只包含一個 IP 地址,表示原始客戶端的 IP。不過,如果存在多級代理,且后面的代理也設置了X-Real-IP
,則會覆蓋前面的值,所以需在第一個代理服務器上正確設置該頭信息,并確保后續(xù)代理不對其進行篡改。 - True-Client-IP :是 Cloudflare 提供的一個請求頭,用于獲取客戶端真實 IP 地址。當網(wǎng)站所有流量都通過 Cloudflare 過濾時,可使用此頭來獲取用戶的真實 IP,其優(yōu)先級高于
X-Forwarded-For
。 - CF-Connecting-IP :也是 Cloudflare 提供的用于獲取真實 IP 的請求頭字段,當 Cloudflare 的代理服務器與客戶端建立連接時,會將客戶端的真實 IP 地址放入此字段。
- X-Cluster-Client-IP :有些應用程序服務器或中間件在經(jīng)過負載均衡或集群環(huán)境后,可能會使用該請求頭來傳遞客戶端的真實 IP 地址。
- X-Forwarded :其值通常是一個逗號分隔的列表,包含了客戶端 IP 地址以及請求經(jīng)過的中介服務器的 IP 地址,格式與
X-Forwarded-For
類似,可用于獲取客戶端真實 IP,但同樣可能存在偽造風險。 - X-Forwarded-Host :可用來傳遞原始請求中的 Host 請求頭信息,雖然不能直接提供客戶端 IP,但在某些復雜請求轉(zhuǎn)發(fā)場景下,與 IP 相關的請求頭一起,有助于更準確地識別和定位客戶端請求的相關信息。
- X-Forwarded-Proto :用于告知服務器原始請求所使用的協(xié)議,如 HTTP 或 HTTPS。雖然它本身不包含 IP 信息,但在處理不同協(xié)議的請求轉(zhuǎn)發(fā)時,與 IP 相關的請求頭結(jié)合,可幫助服務器更全面地了解客戶端請求的上下文,從而更準確地進行相應的處理和安全策略制定。
需要注意的是,僅依賴請求頭來獲取真實 IP 存在風險,因為某些請求頭如 X-Forwarded-For
可被客戶端偽造。以下是一些更可靠的獲取真實 IP 的方法和注意事項:
- 使用 TCP 連接中的 Remote Address :對于直接與客戶端建立 TCP 連接的服務器,通過編程語言提供的相關 API 或函數(shù)獲取 TCP 連接中的遠程地址,即
Remote Address
,這是客戶端與服務器建立連接時的 IP 地址,無法被偽造,是最可靠的真實 IP 獲取方式。 - 結(jié)合 CDN 服務 :如果網(wǎng)站使用了 CDN 服務,可參考 CDN 服務商提供的文檔,使用其特定的獲取真實 IP 的方法和接口。例如,Cloudflare 的
CF-Connecting-IP
、Akamai 的True-Client-IP
等。 - 配置反向代理服務器 :在 Nginx 等反向代理服務器中,正確配置
proxy_set_header
指令,將客戶端的真實 IP 地址傳遞給后端服務器,如設置proxy_set_header X-Real-IP $remote_addr;
和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
等,并在后端服務器中合理解析這些頭信息來獲取真實 IP。 - 使用專業(yè)模塊或工具 :如 Nginx 的
nginx_http_realip_module
模塊,通過設置set_real_ip_from
和real_ip_header
指令,可指定可信的代理服務器 IP 地址,并告知 Nginx 使用哪個請求頭中的 IP 地址作為客戶端的真實 IP,從而有效防止 IP 偽造。 - 日志分析 :有時通過分析服務器日志也可以獲取到真實的客戶端 IP 地址,許多日志管理工具和平臺如 ELK Stack、Splunk 等,提供了強大的日志分析功能,可幫助從日志中提取有價值的信息,包括 IP 地址。
- 驗證 IP 的可信度 :對于從請求頭中獲取的 IP 地址,尤其是
X-Forwarded-For
等可能被偽造的頭信息中的 IP,要進行可信度驗證。例如,檢查 IP 是否來自可信的代理服務器、CDN 節(jié)點或自己的網(wǎng)絡基礎設施等,可通過維護一個可信 IP 白名單,只信任來自這些 IP 的請求頭中的 IP 信息,來提高獲取真實 IP 的準確性。