我们有以下的HTTPS流量的情况下设置:Tomcat的背后防火墙后面的Apache:AJP忽略X - 转发,原
- 防火墙:终止HTTPS,增加了 “X-转发 - 协议:https” 开头,转发到阿帕奇通过http
- 阿帕奇:转发到Tomcat通过AJP
- 的Tomcat::通过AJP连接器
我们增加了RemoteIpValve到Tomcat的server.xml接收请求
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
protocolHeader="x-forwarded-proto"
/>
如果我们跳过Apache并使用普通的HTTP连接器直接从防火墙转发到Tomcat,它就可以工作。在这种情况下,Tomcat使用https来重定向和基地网址。
但是,一旦我们通过Apache和AJP,X-Forwarded-Proto头似乎被忽略。我们检查了X-Forwarded-Proto头在Tomcat的请求中仍然存在。
我想通过AJP告诉Tomcat使用了哪个前端协议(http或https)。也许这不会发生?我们是否需要告诉Apache以某种方式考虑AJP的X-Forwarded-Proto?
Apache的虚拟主机配置:
<VirtualHost *:80>
ServerName www.myserver.biz
JkMount /* LoadBalancerHD
</VirtualHost>
workers.properties:
worker.list=LoadBalancerHD
worker.LoadBalancerHD.balance_workers=HDNode1,HDNode2
worker.LoadBalancerHD.type=lb
worker.LoadBalancerHD.sticky_session=True
worker.HDNode1.type=ajp13
worker.HDNode1.host=webserver01
worker.HDNode1.port=8010
worker.HDNode1.distance=0
worker.HDNode2.type=ajp13
worker.HDNode2.port=8010
worker.HDNode2.host=webserver02
worker.HDNode2.distance=1