AWS 负载均衡器始终将 443 路由到 8443

AWS load balancer always routes 443 to 8443

我在 ec2 实例上提供内容 运行 tomcat 7. 我将 tomcat 配置中的所有流量路由到 8443,并安装了有效的证书。当我明确地放置 https://website.com:443 the site loads fine, but when i put in http://website.com 时,它应该路由到端口 443 的 https,但它使用端口 8443 代替。任何人都知道为什么会发生这种情况?我在另一台服务器上有完全相同的配置,但我有两台不想运行的新服务器。

在我的 tomcat server.xml 我有:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"
               ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
               TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
               TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,
               TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,
               TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"
               keystoreFile="conf/cert.p12"
               keystorePass="password"
               keystoreType="PKCS12" />

并在 web.xml 中:

<security-constraint>
 <web-resource-collection>
 <web-resource-name>Protected Context</web-resource-name>
 <url-pattern>/*</url-pattern>
 </web-resource-collection>
 <!-- auth-constraint goes here if you requre authentication -->
 <user-data-constraint>
 <transport-guarantee>CONFIDENTIAL</transport-guarantee>
 </user-data-constraint>
 </security-constraint>

找到了这个问题的答案,事实证明我必须通过 TCP 将所有流量从 8443 路由到 8443。客户端请求端口 80,根据我的负载均衡器配置路由到 8080 以便 tomcat 提供服务内容,tomcat 正在将请求转为请求端口 8443。

8443 没有被路由回 tomcat 服务器上的 8443,所以它最终陷入了死胡同。希望有一天这对其他人有所帮助。

Tomcat 在使用 CONFIDENTIAL

transport-guarantee 时发送重定向

默认情况下,这是您的连接器端口。 运行一个curl -vs http://website.com确认。

您可以将 http/8080 连接器 redirectPort 设置为 443 但这意味着您要选择 ELB 重定向来工作。本地 Tomcat 重定向将开始失败,因为 443 上没有本地监听,只有 ELB 会监听。