我在AWS上有一个由Elastic Beanstalk提供支持的负载平衡环境。 SSL证书应用于负载均衡器。要强制使用https重定向,我已按照此帖Redirect to https through url rewrite in IIS within elastic beanstalk's load balancer中接受的答案进行操作。这些是我在web.config中编写的确切代码行
<rewrite>
<rules>
<rule name="Force Https" stopProcessing="true">
<match url="healthcheck.html" negate="true" />
<conditions>
<add input="{HTTP_X_FORWARDED_PROTO}" pattern="https" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
但这会导致环境健康状况在发布后5分钟内变为红色,网站开始出现503错误。如果我删除它们,那么没有错误。请帮助我解决这个威胁,以便https重定向成功。在发布后的前5分钟内,http请求被成功重定向到https。只有在那之后503错误才会开始。
答案 0 :(得分:1)
如果您的ELB报告HTTP状态代码503,通常意味着它背后没有健康的EC2实例。
请参阅ELB故障排除指南:http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/ts-elb-error-message.html#ts-elb-errorcodes-http503
现在问题是为什么?
基本上,您的健康状况检查失败。
在您粘贴的代码段中,您正在强制除healthcheck.html
之外的所有请求的HTTP到HTTPS重定向。我们的想法是,这种排除应该是您的健康检查。
要解决此问题:
确保您在EC2实例上进行运行状况检查,当通过HTTP直接访问EC2实例时返回200。健康检查必须返回200,否则ELB将无法通过检查,您的EC2实例将被视为不健康。
确保ELB配置的运行状况检查与EC2实例运行状况检查路径匹配。在运行状况检查路径的开头包含前导/
。
将运行状况检查路径放在<rewrite>
规则中,省略前导/
。您可能希望在开头添加^
,在结尾添加$
,因为它是正则表达式比较。
如果<rewrite>
规则中的值与ELB中的实际运行状况检查不匹配,那么您的ELB将收到HTTP到HTTPS重定向响应,这被视为失败。