Nginx

使用 Real-IP 時如何記錄 $remote_addr 的原始值

  • December 19, 2015

我的環境有通過多個系統的使用者請求:

$$ Client $$–>$$ ELB $$—>$$ nginx $$–>$$ web $$ (ELB = AWS 彈性負載均衡器)

多虧了這個答案,我讓 nginx 確定了正確的客戶端 IP 地址並將其傳遞給帶有X-Forwarded-ForX-Real_IP標頭的上游伺服器(Web)。相關的 nginx 配置:

   real_ip_header      X-Forwarded-For;
   set_real_ip_from        10.0.0.0/8;
   real_ip_recursive   on;
   proxy_set_header X-Real-IP $remote_addr;

我的問題是,nginx 中的 Real IP 模組將現有變數替換為其計算結果。這給了我原始客戶端 IP,但我失去了實際將請求發送到代理(即 ELB)的系統的 IP 地址。$remote_addr``X-Forwarded-For

總的來說,擁有客戶端 IP 對我來說更重要,但我希望能夠記錄完整的請求鏈,以便了解(和調試)流量是如何流動的。目前,我只能讓 nginx 記錄客戶端 IP、自己的 IP 和上游伺服器 IP。我也希望能夠記錄 ELB IP。

我看到X-Istence在 2013 年提出了同樣的問題,但運氣不佳。從那以後有什麼改變或改善嗎?

您可以在變數$realip_remote_addr中獲取連接 ELB 的原始客戶端地址,但請注意,此變數僅在 nginx 1.9.7 中添加,因此您需要執行最新版本的 nginx。

引用自:https://serverfault.com/questions/744141