nginx獲取真實ip,proxy_set_head怎麼設置頭部信息

導讀 反向代理服務器是一種代理服務器,用於管理從外部網絡到內部網絡的連接或任何特定請求。它保護、路由和管理從外部網絡到內部網絡、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。Linux就該這麼學

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章