我有一个指向AWS ELB的子域(test.XXXX.com),它接受HTTP(80)和HTTPS(443)请求。我已为443的HTTPS连接配置了SSL认证。 我已经尝试通过更改web.xml和server.xml来执行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。
答案 0 :(得分:3)
我有一个问题的解决方案,但它不涉及tomcat。 您可以使用Cloudfront分发 让我强调通过Cloudfront Distribution实现这一目标的几个关键配置:
这样做有效,它需要重定向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,这将忽略所有重定向。