我使用这种配置设置基于Spring Boot的微服务环境 -
-
nginx作为centos 7上的负载均衡器 . (配置为使用x-forwarded-for)
-
基于netflix zuul代理服务器的Spring启动API网关 . Tomcat是嵌入式容器 .
-
基于Spring Cloud的产品微服务 . Tomcat作为嵌入式容器 .
Spring Boot版本:1.5.6
当最终用户打电话给Product Microservice时,它会通过Nginx - > Api网关 - >产品服务 .
现在,当我想在产品Microservice中获取远程客户端IP地址时问题就出现了 . 我总是得到127.0.0.1作为IP地址 . 以下是Products微服务中获取客户端IP的代码
private String getClientIP() {
String xfHeader = request.getRemoteAddr();
if (StringUtils.isBlank(xfHeader) || xfHeader.equals("127.0.0.1")) {
return request.getHeader("X-Forwarded-For");
}
return xfHeader.split(",")[0];
}
API网关application.properties配置为使用 server.use-forward-headers: true
附:当我尝试从我的api网关切换到tomcat,然后我开始在产品微服务中获取真正的客户端IP地址 . 因此问题出在我的API网关中的Tomcat配置中 .
1 回答
你可以创建zuul过滤器并像这样更改位置
并过滤