nginx獲取真實ip,proxy_set_head怎麼設定頭部資訊

大雄45發表於2020-03-27
導讀 反向代理伺服器是一種代理伺服器,用於管理從外部網路到內部網路的連線或任何特定請求。它保護、路由和管理從外部網路到內部網路、Web伺服器或專用網路的流量。

nginx作為web伺服器一個重要的功能就是反向代理。

當然你也可以使用nginx配置正向代理,本是介紹如何配置nginx的反向代理。

nginx反向代理的指令不需要新增額外的模組,預設自帶proxy_pass指令,只需要修改配置檔案就可以實現反向代理。

$proxy_add_x_forwarded_for
$http_x_forwarded_for

這兩個的變數的值的區別,就在於,proxy_add_x_forwarded_for 比http_x_forwarded_for 多了一個$remote_addr的值,但是$remote_addr 只能獲取到與伺服器本身直連的上層請求ip,所以設定$remote_addr一般都是設定第一個代理上面;但是問題是,有時候是透過cdn訪問過來的,那麼後面web伺服器獲取到的,永遠都是cdn 的ip 而非真是使用者ip,那麼這個時候就要用到X-FORward—for了,這個變數的意思,其實就像是鏈路反追蹤,從客戶的真實ip為起點,穿過多層級的proxy ,最終到達web 伺服器,都會記錄下來,所以在獲取使用者真實ip的時候,一般就可以設定成,proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 這樣就能獲取所有的代理ip 客戶ip。

在列印log 的時候

$http_x_real_ip|$remote_addr

就是 使用者的真是ip

配置如下

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

還有一種情況就是,客戶在經過cdn請求的時候,本來$proxy_add_x_forwarded_for這裡記錄的值都全部都包括,但是,當你需要取值的時候,會發現,即便用排除代理ip模組。

set_real_ip_from 100.0.0.0/8;(這裡是已知的代理ip)
real_ip_header X-Forwarded-For;
real_ip_recursive on;
X-Forwarded-For

裡依然有多個ip,這個時候直接取值$http_x_real_ip 就好了,但是前提條件是,cdn 那邊也設定了X-forward,不然,你這邊獲取的你認為是使用者的ip 其實是cdn的ip。

原文來自: 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2682926/,如需轉載,請註明出處,否則將追究法律責任。

相關文章