作者:楓凡
背景
業務架構:
Client->WAF->LB->ECS->容器
問題:在容器中擷取不到真實的用戶端公網IP
抓包分析
1.在ECS上的抓包分析,看到WAF已經将 真實用戶端位址放到了 x-Forwarded-For 的字段中傳給了ECS

2.在容器中抓包,看到一個x-Forwarded-For的字段是錯誤的
對應的IP為WAF的回源位址
3.與容器同學确認 ingress的行為
将真實的用戶端IP,放到了x-Original-Forwarded-For。而将WAF的回源位址放到了 x-Forwarded-For了。
處理方法
1.修改容器的配置檔案
配置檔案:
kube-system/nginx-configuration
修改指令:
kubectl -n kube-system edit cm nginx-configuration
添加内容:
compute-full-forwarded-for: "true"
forwarded-for-header: "X-Forwarded-For"
use-forwarded-headers: "true"
儲存後立即生效。随後ingress的添加真實的IP行為會與RFC一樣都依次添加到X-Forwarded-For中了。
更多參數參考這裡。2.業務程式需要調整擷取真實IP的字段為x-Original-Forwarded-For。
姐妹篇:
Apapche 擷取真實IP位址方法 Nginx擷取真實IP位址方法