我有以下 iptable 条目:
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8443
在我的 server.xml 中,我有仅有的以下连接器:
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" SSLEnabled="true"
URIEncoding="UTF-8" keyAlias="tomcat" keystorePass="pass" keystoreFile="/home/myhome/.keystore" />
当我使用 http 时,比如从 Firefox 中,我看到一个 GET 请求,请求一个小型文件(7 字节),类型为 application/octet-stream,而不是使用 https 时会获得的页面。我使用的是 Ubuntu 18 和 Tomcat 8。
我该如何配置将 http 重定向到 https?
答案1
您正在尝试将普通 HTTP 端口重定向到 HTTPS。
浏览器需要纯文本,但获得了 SSL 流,这就是您下载的内容。
您应该使用 HTTP 重定向到 HTTPS,而不是 IPTables。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
您仍然可以使用 IPTables 将 80 重定向到 8080 并将 443 重定向到 8443。但更好的解决方案是在 tomcat 前面使用反向代理来处理默认端口。