Nginx

Nginx set_real_ip_from AWS ELB 負載均衡器地址

  • March 12, 2019

我在 Amazon ELB 負載均衡器後面有一組 Nginx 伺服器。我正在使用 set_real_ip (來自HttpRealIpModule),以便我可以訪問這些伺服器上的原始客戶端 IP 地址(用於傳遞到 php-fpm 並在HttpGeoIPModule中使用)。

似乎set_real_ip_from在nginx配置中只能接受一個IP地址。然而,關於 ELB 機器,亞馬遜說:

注意:由於與 LoadBalancer 關聯的 IP 地址集可能會隨時間而變化,因此您永遠不應使用任何特定 IP 地址創建“A”記錄。如果您想為 LoadBalancer 使用友好的 DNS 名稱,而不是 Elastic Load Balancing 服務生成的名稱,您應該為 LoadBalancer DNS 名稱創建 CNAME 記錄,或使用 Amazon Route 53 創建託管區域。有關更多資訊,請參閱將域名與 Elastic Load Balancing 結合使用

但是,如果我需要輸入 IP 地址,我不能使用 CNAME(亞馬遜的或我自己的)。這個問題有解決方案嗎?

如果您可以保證所有請求都來自 ELB(我不熟悉它),您可以嘗試:

real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;

這應該告訴 nginx 信任來自任何人的 X-Forwarded-For 標頭。不利的一面是,如果有人直接訪問您的伺服器,他們將能夠欺騙 X-Forwarded-For 標頭,並且 nginx 將使用錯誤的客戶端 IP 地址。

今天的最佳實踐是使用 VPC,因此,您將知道 ELB 的確切 CIDR。然後,您可以在 Nginx 配置文件中添加如下內容:

real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;

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