一、 Forwarded For是什麼?
在理解nginxx-forwarded-for之前,我們先了解一下Forwarded For。
簡單的說,當我們通過代理訪問網站時,網站只會記錄代理伺服器的IP地址,這樣會影響我們運維的判斷和處理方式,於是就有了Forwarded For這個標準。
它允許代理伺服器在數據包頭部加入「X-Forwarded-For」的欄位,用於記錄原始請求的客戶端真實IP地址。
二、為什麼要使用nginxx-forwarded-for?
如果你的架構中使用了nginx這個反向代理伺服器,而且又想記錄用戶的真實IP地址,那麼就要使用nginxx-forwarded-for配置來保存這個信息。
nginx默認只保存最後一個代理伺服器的IP地址,而沒有保存前面的IP地址信息,因此它不能完整記錄用戶的信息。為此,nginx的官方提供了一個設置,即ngx_http_realip_module。
ngx_http_realip_module模塊只在HTTP請求的第一個請求頭中包含一個IP地址,並且它只改變IP地址。
當啟用這個模塊後,如果客戶端經過代理伺服器訪問應用,則可以通過nginx的標準變數(如access_log,ngx_http_limit_req_module等),將它們的真正公網IP地址轉嫁回應用。
三、怎麼使用nginxx-forwarded-for?
1. 安裝ngx_http_realip_module模塊
如果安裝了完整版nginx,則可以通過檢查所有已默認安裝模塊列表來檢查是否已安裝ngx_http_realip_module:
“`
./configure –help | grep realip
“`
如果看到了–with-http_realip_module的選項,並且這個選項已啟用,則表示已將ngx_http_realip_module模塊包含到nginx進程中。
如果沒有啟用,則必須重新編譯nginx,啟用它,或使用其他軟體源重新安裝該軟體,帶有ngx_http_realip_module模塊的nginx。
2. 配置nginx.conf文件
“`
http {
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_recursive on;
}
“`
在http{…}內配置,配置real_ip_header,告訴nginx使用哪個請求頭來讀取客戶端真實IP地址。 標準填寫為X-Forwarded-For。
set_real_ip_from用於指定信任的代理伺服器的IP或範圍。如果設置為空,則視為代理伺服器具有等同於客戶端的權威性,容易受到惡意定義的X-Forwarded-For攻擊。
real_ip_recursive,默認情況下,ngx_http_realip_module模塊的真正的轉發人IP地址是從客戶端或從最後一個代理伺服器的IP地址中獲取的,另一個代理伺服器的IP地址是不能獲取的,如果要獲取,需要開啟這一設置。
四、小結
若要獲取客戶端真實IP,則需要使用ngx_http_realip_module 模塊。ngx_http_realip_module 模塊在經過代理伺服器時,支持從http請求頭X-Forwarded-For中獲取客戶端真實IP,並將客戶端真實IP保存到nginx標準變數中。
因此,如果你的應用有代理伺服器的話,請建議節省時間,並建議使用ngx_http_realip_module mod。
原創文章,作者:VTIGU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334505.html