如何使用 Tomcat 和 iptables 从端口 80 重定向到端口 8443

如何使用 Tomcat 和 iptables 从端口 80 重定向到端口 8443

我有以下 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 前面使用反向代理来处理默认端口。

相关内容