當您通過SLB訪問應用時,可以通過本文提供的方法在代碼中獲取客戶端真實IP。
解決方案
ECS應用
方式一:在后端Java代碼中使用以下方式獲取。
String client_ip = request.getHeader("x-forwarded-for");
方式二:通過獲取HTTP Header中的
x-real-ip
、wl-proxy-client-ip
參數獲取客戶端的真實IP。
K8s應用
- 登錄EDAS控制臺。
在左側導航欄,單擊應用管理>應用列表,在頂部菜單欄選擇地域并在頁面上方選擇微服務空間,在集群類型拉列表選擇K8s集群,然后單擊目標應用名稱。
在應用總覽頁面的訪問方式配置區域,單擊負載均衡(公網)或負載均衡(私網)右側的或圖標。
在負載均衡(公網)或負載均衡(私網)對話框,將外部流量策略從Cluster改為Local,然后單擊確認。
在后端Java代碼中通過以下方式獲取客戶端的真實IP。
String client_ip = request.getRemoteAddr();
結合以上部署在ECS集群和容器服務Kubernetes集群的應用獲取客戶端IP的方法,可通過三元運算符將這兩種方式變為一行代碼,可適配EDAS中不同的集群類型。
String client_ip = request.getHeader("x-forwarded-for") == null ? request.getRemoteAddr() : request.getHeader("x-forwarded-for");
文檔內容是否對您有幫助?