我们在https流量的情况下进行了以下设置:
我们已将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以某种方式考虑使用X-Forwarded-Proto for AJP?
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
答案 0 :(得分:0)
在研究了mod_jk文档之后,我发现mod_jk会评估Apache环境变量HTTPS
以检测https。通常,如果Apache处理https流量本身,则此变量由mod_ssl设置。但事实并非如此,因为HTTPS已经在Apache之前终止。
只需根据http标头设置环境变量即可:
SetEnvIfNoCase X-Forwarded-Proto https HTTPS=on
BTW:可以使用JkHTTPSIndicator
指令更改由mod_jk评估的环境变量(请参阅mod_jk docs)。以下是相同的:
SetEnvIfNoCase X-Forwarded-Proto https EXTERNAL_TRAFFIC_IS_HTTPS=on
JkHTTPSIndicator EXTERNAL_TRAFFIC_IS_HTTPS
如果更改HTTPS
会干扰其他模块,则可能会有用。