【发布时间】:2017-09-01 08:35:07
【问题描述】:
如果是 https 流量,我们有以下设置:
- 防火墙:终止 https,添加“X-Forwarded-Proto: https”,通过 http 转发到 Apache
- Apache:通过 AJP 转发到 Tomcat
- 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 进行重定向和基本 url。
但是一旦我们通过 Apache 和 AJP,X-Forwarded-Proto 标头似乎就被忽略了。我们检查了,X-Forwarded-Proto 标头仍然存在于 Tomcat 的请求中。
我猜想通过 AJP 告诉 Tomcat 使用哪种前端协议(http 或 https)。也许这不会发生?我们是否需要以某种方式告诉 Apache 为 AJP 考虑 X-Forwarded-Proto?
Apache VirtualHost 配置:
<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
【问题讨论】:
标签: apache tomcat https mod-jk ajp