2017-08-19 101 views
10

我有一个指向AWS ELB的子域(test.XXXX.com),它接受HTTP(80)和HTTPS(443)请求。我已将SSL认证配置为443用于HTTPS连接。 我试图做的HTTP到HTTPS通过在HTTP to HTTPS重定向适用于AWS ELB和Tomcat7服务器

http://www.journaldev.com/160/steps-to-configure-ssl-on-tomcat-and-setup-auto-redirect-from-http-to-https

叙述改变web.xml和server.xml中重定向在Tomcat的水平。但问题是,我需要一个端点AWS ELB健康检查是不执行HTTP到HTTPS重定向。 我曾尝试不同的解决方案,但没有success.I也试过

<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

+0

对于健康检查,您是否厌倦了使用从重定向排除的特定路线? – Ashan

+0

@Ashan是..这是从HTTP到HTTPS重定向排除工作正常。但其他页面由于ERR_TOO_MANY_REDIRECTS而无法访问 – MasterCode

+0

如果您已经配置了带有SSL证书的Tomcat,那么在您的负载平衡器上,您可以使用'HTTPS 443 - > HTTPS 443' –

回答

3

我有一个解决问题的方法,但它不涉及到tomcat的。 您可以使用Cloudfront发行版。
我要强调的几个关键CONFIGS对于通过的Cloudfront分布实现这一目标:

  • 选择一个Web分发
  • 在下拉列表中的原产地域名选择ELB。原始路径将是空白的,Origin Id只是您选择的标识符。
  • 现在在默认缓存行为设置下,请选择将HTTP协议重定向到https协议策略。请仔细检查所有其他设置,并选择适合您的内容。它们应该相当简单直接。 (请输入您的域名test.xxxx.com替代域名)
  • 点击创建分配。
  • 创建分配后,转到分配并转到行为选项卡。
  • 这里你会看到已经有一个默认条目。转到创建行为,键入您的路径模式。所以如果您的健康检查网址是test.xxxx.com/healthcheck那么您的路径模式将变为/healthcheck
  • 请为查看器协议策略选择HTTP和HTTPS。
  • 最后,在您的路线53中,请为您的域添加一条记录,并将其指向您刚刚创建的云端分布。

这样做很有效,它将重定向关闭tomcat并在云端级别进行处理。默认情况下,所有请求都会重定向到HTTPS,而只允许/ healthcheck路径的HTTP请求。重定向不需要在较低级别处理。 请让我知道这是否适合你。 此外,请注意,route53和cloudfront更改需要时间来传播。所以请等待足够的成功测试

+0

我一直在寻找不同的东西,我赞赏你的努力 – MasterCode

0

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

你不能用经典的Elastic Load Balancer来做到这一点,但你可以用新的Application Load Balancer

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

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

0

的ELB愈合检查可以被配置为使用HTTPS终结点,检查选项:ping protocolhttp://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html

平协议

要使用的协议,以与所述实例连接。

有效值:TCP,HTTP,HTTPS和SSL

控制台默认:HTTP

CLI/API默认:TCP

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

+0

如果您查看他们使用ELB for HTTPS的屏幕截图 - 您可以看到证书ID的前几个字符 - 因此使用HTTPS进行健康检查将不起作用。尽管使用TCP进行健康检查仍然有效。 – Raniz