我有几个 Tomcat 服务器,位于 NetScaler 负载均衡器后面,可以执行 SSL 卸载。我已在所有服务器上的 server.xml 中添加了以下行:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto" />
这在除 2 台(相同)服务器之外的所有服务器上都有效。我正尝试让它在那两台服务器上运行。
我嗅探到了流量,它包含x-forwarded-proto
标头,其值为https
,正如它应该的那样。的返回结果request.getHeader("x-forwarded-proto")
是https
。但是,request.getScheme()
返回http
并request.isSecure()
返回false
。
我怎样才能使 remoteIpValve 工作?
谢谢。
答案1
负载均衡器的远程 IP 是什么?
连接设备(在本例中为负载均衡器)的 IP 地址必须在配置中internalProxies
,否则将不应用对远程地址、方案、端口和请求安全性的转换。
默认情况下,localhost 和大多数 RFC1918 范围都是允许的(172.16/12 除外)。如果连接到 tomcat 服务器时代理的 IP 不在这些范围内,则需要配置设置internalProxies
以允许负载均衡器。