我在运行 tomcat 7 的 ec2 实例上提供内容。我将 tomcat 配置中的所有流量路由到 8443,并安装了有效的证书。当我明确地把 https://website.com:443该网站加载正常,但是当我输入 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,所以它最终进入了死胡同。希望有一天这对其他人有帮助。
我是一名优秀的程序员,十分优秀!