IIS强制https重定向导致503错误

时间:2016-10-26 17:14:22

标签: amazon-web-services redirect ssl iis

我在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错误才会开始。

1 个答案:

答案 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重定向。我们的想法是,这种排除应该是您的健康检查。

要解决此问题:

  1. 确保您在EC2实例上进行运行状况检查,当通过HTTP直接访问EC2实例时返回200。健康检查必须返回200,否则ELB将无法通过检查,您的EC2实例将被视为不健康。

  2. 确保ELB配置的运行状况检查与EC2实例运行状况检查路径匹配。在运行状况检查路径的开头包含前导/

  3. 将运行状况检查路径放在<rewrite>规则中,省略前导/。您可能希望在开头添加^,在结尾添加$,因为它是正则表达式比较。

  4. 如果<rewrite>规则中的值与ELB中的实际运行状况检查不匹配,那么您的ELB将收到HTTP到HTTPS重定向响应,这被视为失败。