用于AWS ELB和Tomcat7服务器的HTTP到HTTPS重定向

时间:2017-08-19 11:14:46

标签: tomcat ssl redirect amazon-ec2 amazon-elb

我有一个指向AWS ELB的子域(test.XXXX.com),它接受HTTP(80)和HTTPS(443)请求。我已为443的HTTPS连接配置了SSL认证。 我已经尝试通过更改web.xml和server.xml来执行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

4 个答案:

答案 0 :(得分:3)

我有一个问题的解决方案,但它不涉及tomcat。 您可以使用Cloudfront分发 让我强调通过Cloudfront Distribution实现这一目标的几个关键配置:

  • 选择网络分发
  • 在Origin Domain Name的下拉列表中选择您的ELB。 origin Path将为空,Origin Id只是您选择的标识符。
  • 现在,在默认缓存行为设置下,请为查看器协议策略选择将HTTP重定向到HTTPS。请仔细检查所有其他设置,并选择适合您的方式。它们应该相当简单明了。 (请输入您的域名 - test.xxxx.com以获取备用域名)
  • 点击创建发布。
  • 创建分发后,转到分配并转到行为标签。
  • 在这里你会看到已经有一个默认条目。转到“创建行为”,键入路径模式。因此,如果您的健康检查网址为 test.xxxx.com/healthcheck ,那么您的路径模式将变为 / healthcheck
  • 请为查看器协议策略选择HTTP和HTTPS。
  • 最后,在您的route53中,请为您的域添加一条记录,并将其指向您刚创建的云端分发。

这样做有效,它需要重定向tomcat并在云端级别处理。默认情况下,所有请求都会重定向到HTTPS,而只允许/ healthcheck路径允许HTTP请求。无需在较低级别处理重定向。 如果这对你有用,请告诉我。 此外,请注意route53和cloudfront更改需要时间来传播。所以请等待足够的时间进行成功的测试

答案 1 :(得分:1)

现在,AWS ELB支持两个新操作:重定向和固定响应。您可以将这些操作配置为基于内容的路由规则的一部分,从而使您可以将此功能卸载到负载均衡器

通过重定向操作,负载均衡器可以将传入请求从一个URL重定向到另一个URL。这包括将HTTP请求重定向到HTTPS请求的功能。

答案 2 :(得分:0)

由于您在Tomcat中使用HTTP到HTTPS重定向,因此最简单的解决方案是将重定向视为有效响应。

使用经典的Elastic Load Balancer无法做到这一点,但您可以使用新的Application Load Balancer

我建议您将负载均衡器切换到新的ALB,并configure the health check接受200-399作为健康的响应代码。

您还可以通过切换到新的应用程序负载均衡器获得其他好处,因为它每小时更便宜,并且可以根据路径和主机名路由到不同的实例组。

答案 3 :(得分:0)

可以将ELB修复检查配置为使用https端点,选中选项:ping protocol http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html

  

Ping协议

     

用于连接实例的协议。

     

有效值:TCP,HTTP,HTTPS和SSL

     

控制台默认值:HTTP

     

CLI / API默认值:TCP

您也可以在端口80/443中尝试TCP,这将忽略所有重定向。