我有一个子域 (test.XXXX.com) 指向接受 HTTP(80) 和 HTTPS(443) 请求的 AWS ELB。我已经为 HTTPS 连接配置了 443 证书的 SSL。 我已经尝试通过更改 web.xml 和 server.xml 在 Tomcat 级别进行 HTTP 到 HTTPS 重定向,如
中所述但问题是我需要一个不执行 HTTP 到 HTTPS 重定向的 AWS ELB 健康检查端点。 我尝试了不同的解决方案但没有成功。我也尝试过
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/XXXXX/XXXXXX.html</url-pattern>
</web-resource-collection>
</security-constraint>
我的服务器 server.xml 具有以下配置
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<Connector port="443" maxThreads="2000" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/home/XXXXX/XXXXX.keystore"
keystorePass="XXXXX" clientAuth="false" keyAlias="XXXX"
sslProtocol="TLS" protocol="org.apache.coyote.http11.Http11Protocol"/>
但是当尝试通过浏览器访问它时,它会给出异常 ERR_TOO_MANY_REDIRECTS。
最佳答案
我有解决你问题的方法,但它与 tomcat 无关。
您可以使用 Cloudfront 发行版。
让我强调一些通过 Cloudfront Distribution 实现这一目标的关键配置:
- 选择网络分配
- 在源域名下拉列表中选择您的 ELB。 origin Path 将为空,Origin Id 只是您选择的标识符。
- 现在在默认缓存行为设置下,请为查看器协议(protocol)策略选择将 HTTP 重定向到 HTTPS。请仔细检查所有其他设置并选择适合您的设置。它们应该相当简单明了。 (请输入您的域名 - test.xxxx.com 备用域名)
- 点击创建分配。
- 创建分配后,转到分配并转到行为选项卡。
- 在这里您会看到已经有一个默认条目。转到创建行为,输入您的路径模式。因此,如果您的健康检查网址是 test.xxxx.com/healthcheck,那么您的路径模式将变为 /healthcheck。
- 请为查看器协议(protocol)策略选择 HTTP 和 HTTPS。
- 最后,在您的 route53 中,请为您的域添加一条记录,并将其指向您刚刚创建的云端分配。
如此有效,它所做的是,它取消了 tomcat 的重定向,并在云端级别进行处理。默认情况下,所有请求都重定向到 HTTPS,而仅允许/healthcheck 路径 HTTP 请求。不需要在较低级别处理重定向。 如果这对您有用,请告诉我。 另外,请注意 route53 和 cloudfront 更改需要时间来传播。所以请充分等待以确保测试成功
关于tomcat - AWS ELB 和 Tomcat7 服务器的 HTTP 到 HTTPS 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45770856/