發表文章

目前顯示的是 10月, 2019的文章

如何在Nginx所設置的Proxy中可以取得真實客戶的IP位址

如何在Nginx所設置的Proxy架構中可以取得真實客戶的IP位址 常見的情境是需要對客戶端IP進行特定的處理,例如:限定存去次數、流量或是啟用快取服務,此時及需要藉由來源客戶端的IP位置來關聯。 設定前先來說明一下一些變數名稱: $remote_addr Nginx核心模組中( ngx_http_core_module )中的內建變數$remote_addr就是用戶端的IP位址。 X-Forwarded-For X-Forwarded-For(XFF),是一個用來辨識通過HTTP Proxy或是load balance連接到web server,用戶端最原始的IP位址使用的HTTP Request header欄位。 X-Real-IP X-Real-IP為傳統上HTTP reverse proxy會使用非標準的header去告知upstream server關於來源戶端的IP位址,之一個HTTP header欄位。在Nginx的文件( http://nginx.org/en/docs/http/ngx_http_proxy_module.html )範例中可以看到。 $proxy_add_x_forwarded_for Nginx Http proxy模組中( ngx_http_proxy_module )中的內建變數$proxy_add_x_forwarded_for,會使用HTTP Request Header, X-Forwarded-For將來源IP記錄於此,當request經過多台proxy或是load balance產生的多筆IP位址會以逗號分開來,如果一開始沒有設置X-Forwarded-For,那麼在模組中的$proxy_add_x_forwarded_for的值就會跟$remote_addr一樣。 通常可以透過下列的指令來設定 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 設定方法: 在第一層的proxy或是load balancer就先設定nginx的default.conf proxy_set_header X-Real-IP $remote_addr; proxy_set_hea