我們有以下的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