通过SLB访问EDAS应用时如何获取客户端真实IP

当您通过SLB访问应用时,可以通过本文提供的方法在代码中获取客户端真实IP。

解决方案

ECS应用

  • 方式一:在后端Java代码中使用以下方式获取。

    String client_ip = request.getHeader("x-forwarded-for");
  • 方式二:通过获取HTTP Header中的x-real-ipwl-proxy-client-ip参数获取客户端的真实IP。

K8s应用

  1. 登录EDAS控制台
  2. 在左侧导航栏,单击应用管理>应用列表,在顶部菜单栏选择地域并在页面上方选择微服务空间,在集群类型拉列表选择K8s集群,然后单击目标应用名称

  3. 应用总览页面的访问方式配置区域,单击负载均衡(公网)负载均衡(私网)右侧的加号编辑图标。

  4. 负载均衡(公网)负载均衡(私网)对话框,将外部流量策略Cluster改为Local,然后单击确认

  5. 在后端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");