tomcat - AWS ELB 和 Tomcat7 服务器的 HTTP 到 HTTPS 重定向

标签 tomcat ssl redirect amazon-ec2 amazon-elb

我有一个子域 (test.XXXX.com) 指向接受 HTTP(80) 和 HTTPS(443) 请求的 AWS ELB。我已经为 HTTPS 连接配置了 443 证书的 SSL。 我已经尝试通过更改 web.xml 和 server.xml 在 Tomcat 级别进行 HTTP 到 HTTPS 重定向,如

中所述

http://www.journaldev.com/160/steps-to-configure-ssl-on-tomcat-and-setup-auto-redirect-from-http-to-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。

enter image description here

最佳答案

我有解决你问题的方法,但它与 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/

相关文章:

java - 如何使用 MultiPageMes​​sagesSupport 通过 PrettyFaces 跨重定向保留 FacesMessages?

ssl - 将更新的 PFX 通配符安装到 tomcat keystore 中

java - 启用 SSL 的 Tomcat 上的非 SSL Web 服务

ssl - 如何将 gzip 与 SSL 或任何替代方案结合使用?

forms - 我的联系表单的提交按钮未提交和重定向

.htaccess - mod_rewrite 对于热链接图像无法正常工作

tomcat - Grails 外部配置日志记录

java - Tomcat 不工作但 apache 工作。在 CentOs 6.x 上

java - 在 eclipse 中运行门管道我得到这个错误 Java.lang.ClassNotFoundException : gate. 资源

eclipse - 在 Tomcat 上使用 Hibernate 5.0.7 和 JPA 2.1