在 Nginx 中啟用 X-Real-IP 和 X-Forwarded-For

在 Nginx 中啟用 X-Real-IP 和 X-Forwarded-For

如何在 Nginx 中同時啟用 X-Real-IP 和 X-Forwarded-For?我目前有以下方法來獲取 Docker 網路中的真實 IP。

set_real_ip_from  172.18.0.0/32;
real_ip_header    X-Real-IP;
real_ip_recursive on;

我還想將真實 IP 從 Cloudflare 傳遞到 Docker 容器。如何在同一配置中同時使用 X-Real-IP 和 X-Forwarded-For,一組 IP 用於 X-Real-IP,一組 IP 用於 X-Forwarded-For?

答案1

如果您嘗試從 CloudFlare 後面取得真實 IP,則應該使用他們自己的標頭 CF-Connecting-IP。如果您沒有自己產生其他標頭,則應該忽略它們,因為它們可能是客戶端偽造的。

real_ip_header CF-Connecting-IP;

答案2

  1. 嘗試地圖ping 他們(不起作用):

    map $remote_addr $real_header {
      default X-Real-IP;
      172.18.0.1 X-Forwarded-For;
    }
    
    server {
      real_ip_header $real_header;
    }
    
  2. 嘗試將這些流分離到不同的伺服器。根據手動 real_ip_header 可以按伺服器或位置設置,因此您可以:

    server {
      listen :8080;
      real_ip_header X-Real-IP;
      include "/all/other/stuff.conf";
    }
    
    server {
      listen :8081;
      real_ip_header X-Forwarded-For;
      include "/all/other/stuff.conf";
    }
    
  3. 使用位置將包含更多語法糖來分隔它們,您可能需要使用 if,但它們是邪惡的。但我認為很可能會創建兩個內部位置,並在這兩個位置之間進行手動內部重寫。這將對用戶完全隱藏。

  4. 我想使用 Lua 也可能有幫助,但請先嘗試之前的建議。

相關內容