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 会监听。
我在 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 会监听。