首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防火墙后面的Tomcat : AJP忽略X转发-Proto

问防火墙后面的Tomcat : AJP忽略X转发-Proto
EN

Stack Overflow用户
提问于 2017-04-06 10:51:14
回答 1查看 2.1K关注 0票数 0

在https流量情况下,我们有以下设置:

  • 防火墙:终止https,添加“X转发-Proto: https",通过http转发到Apache。
  • Apache:通过AJP转发给Tomcat
  • Tomcat:通过AJP连接器接收请求

我们将RemoteIpValve添加到Tomcat的server.xml中:

代码语言:javascript
复制
<Valve className="org.apache.catalina.valves.RemoteIpValve"
                   remoteIpHeader="x-forwarded-for"
                   protocolHeader="x-forwarded-proto"
            />

如果我们跳过Apache并使用常规的从防火墙直接转发到Tomcat,它就能工作。在这种情况下,Tomcat使用https重定向和基本urls。

但是,一旦我们通过Apache和AJP,X转发-Proto头似乎就被忽略了。我们检查了,在Tomcat的请求下,X转发-Proto报头仍然存在.

我猜Tomcat是通过AJP知道使用哪一种前端协议(http或https)。也许这不会发生?我们是否需要告诉Apache考虑一下AJP的X转发Proto?

Apache VirtualHost配置:

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName www.myserver.biz

    JkMount /* LoadBalancerHD
</VirtualHost>

workers.properties:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-06 21:17:39

在研究了mod_jk文档之后,我发现mod_jk对Apache环境变量HTTPS进行了评估,以便检测https。通常,如果mod_ssl处理https通信本身,则该变量由Apache设置。但情况并非如此,因为HTTPS已经在Apache之前终止了。

简单地根据http头设置环境变量就可以了:

代码语言:javascript
复制
SetEnvIfNoCase X-Forwarded-Proto https HTTPS=on

BTW:由mod_jk计算的环境变量可以使用JkHTTPSIndicator指令进行更改(参见jk博士)。以下情况也是如此:

代码语言:javascript
复制
SetEnvIfNoCase X-Forwarded-Proto https EXTERNAL_TRAFFIC_IS_HTTPS=on
JkHTTPSIndicator EXTERNAL_TRAFFIC_IS_HTTPS

如果更改HTTPS会干扰其他模块,则可能会很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43253039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档