
如何在 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
嘗試地圖ping 他們(不起作用):
map $remote_addr $real_header { default X-Real-IP; 172.18.0.1 X-Forwarded-For; } server { real_ip_header $real_header; }
嘗試將這些流分離到不同的伺服器。根據手動 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"; }
使用位置將包含更多語法糖來分隔它們,您可能需要使用 if,但它們是邪惡的。但我認為很可能會創建兩個內部位置,並在這兩個位置之間進行手動內部重寫。這將對用戶完全隱藏。
我想使用 Lua 也可能有幫助,但請先嘗試之前的建議。