在Tomcat中X转发为NULL

我们在负载均衡器中注入x-forwarded-for头,该请求将请求发送到apache web服务器,该请求将inthe proxys(mod_proxy_balancer)请求发送到后端tomcat服务器。 我们在apache的“x-forwarded-for”标题中看到了客户端IP,但是我们在Tomcat访问日志中获得了“ – ”。

我们在Tomcat的internalProxies列表中添加了loadbalancer IP。

从https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html它看起来像安全连接(请求来自内部代理)的x转发为变成NULL和客户端IP分配给远程地址。 那是对的吗? 在使用内部代理服务器设置时,有没有办法在tomcat中将客户端IP保留在x-forwarded-for标头中?

谢谢

AJP在我们的Web服务器和Tomcat服务器之间被使用。 更新:我发现这个答案在Tomcat的文档, https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html ,这是我认为正在发生。 特别:

如果传入的request.getRemoteAddr()匹配阀门的内部代理列表:

  • 循环前面负载均衡器或代理在名为$ remoteIpHeader(默认值x-forwarded-for)的给定请求的Http标头中传递的IP和主机名的逗号分隔列表。 值按从右到左的顺序处理。 对于列表中的每个IP /主机:
  • 如果它匹配内部代理列表,ip / host是swallowe
  • 如果它匹配受信任的代理列表,则将ip / host添加到创build的代理头,否则将ip / host声明为远程ip,并停止循环。
  • 如果名为$ protocolHeader的请求(例如x-forwarded-for)等于protocolHeaderHttpsValueconfiguration参数(默认的https)的值,​​那么request.isSecure = true,request.scheme = https和request.serverPort = 443。注意,443可以用$ httpsServerPortconfiguration参数覆盖。