Tomcat指定应用跳转HTTPS,不影响同服务器IIS应用的配置问题
解决方案:仅Tomcat 9080端口强制跳转HTTPS,不影响IIS应用
下面提供几种精准解决问题的配置方式:
方法一:用Tomcat RewriteValve基于端口定向
这种方式能精准识别Tomcat的9080 HTTP端口请求,直接重定向到4433 HTTPS,不会干扰其他端口或IIS应用。
- 打开Tomcat的
conf/server.xml,找到监听9080的HTTP连接器配置,添加RewriteValve:
<Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="4433"> <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> </Connector>
- 在Tomcat的
conf/Catalina/localhost目录下创建rewrite.config文件,写入规则:
# 匹配9080端口的HTTP请求,重定向到4433的HTTPS RewriteCond %{SERVER_PORT} ^9080$ RewriteRule ^(.*)$ https://%{SERVER_NAME}:4433$1 [R=301,L]
方法二:修正应用内web.xml的安全约束配置
之前在应用web.xml添加约束未生效,大概率是路径配置或Tomcat HTTPS连接器的问题。
- 先确认
conf/server.xml中HTTPS连接器配置正确(已监听4433):
<Connector port="4433" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector>
- 在每个Tomcat应用的
WEB-INF/web.xml中添加安全约束,url-pattern要对应应用的实际访问路径:
<security-constraint> <web-resource-collection> <web-resource-name>Secured App</web-resource-name> <!-- 比如应用访问路径是/app1,就写/app1/*;ROOT应用写/* --> <url-pattern>/app1/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
方法三:全局Host层面配置端口过滤
如果不想逐个应用配置,可在全局Host中添加Valve统一处理:
在conf/server.xml的Host块内添加RewriteValve:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> <!-- 其他原有配置 --> </Host>
然后在conf/Catalina/localhost/rewrite.config中写入和方法一相同的重定向规则即可。
额外说明
你提到Tomcat会处理9088端口的流量,大概率是服务器路由配置有问题(比如反向代理、域名绑定错误地把9088请求转发给了Tomcat)。可以检查服务器端口监听状态,确保IIS的9088端口是独立监听,未被其他服务转发。
内容的提问来源于stack exchange,提问作者benmess
相关产品推荐
相关产品推荐

