当您通过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");
文档内容是否对您有帮助?