Apache2 Httpd反向代理Tomcat:如何告知Tomcat连接为HTTPS?
解决方案
当然有对应的Apache Httpd配置指令可以实现这个需求,核心思路是通过自定义请求头向Tomcat传递「原始连接为HTTPS」的标识,让Tomcat的request.isSecure()方法返回true。
修改Apache Httpd配置
在现有代理配置的基础上,添加两个RequestHeader指令:
# 向Tomcat传递原始请求的协议为HTTPS RequestHeader set X-Forwarded-Proto "https" # 明确标记连接为SSL加密状态 RequestHeader set X-Forwarded-Ssl on ProxyPreserveHost On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/
配合Tomcat配置(必须步骤)
仅在Apache侧添加请求头还不够,Tomcat默认不会识别这些自定义头,需要在Tomcat的server.xml中配置RemoteIpValve,让它读取Apache传递的标识:
在<Engine>标签内添加如下配置:
<Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
这个阀的作用是让Tomcat根据X-Forwarded-Proto头的值,自动将request.isSecure()的返回值设置为true(当值为https时)。
效果验证
配置完成后重启Apache和Tomcat,Tomcat中的Web应用调用request.isSecure()时就会返回true,满足安全连接的要求。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

