【问题标题】:AWS : Classic Load Balancer www.example.com not redirecting to https://www.example.comAWS:Classic Load Balancer www.example.com 未重定向到 https://www.example.com
【发布时间】:2019-11-11 23:03:06
【问题描述】:

我在 AWS 上有一个 EC2 实例,它有 route53 托管区域。我使用 AWS Certificate Manager 进行 SSL,然后使用 Classic Load Balancer 实现 https 重定向。

我在该实例上运行了一个简单的网站,并安装了 apache 服务器。我还制作了用于重定向的 .htaccess 文件。

它适用于以下情况:

1] example.com -> https://www.example.com
2] https://www.example.com -> https://www.example.com
3] http://www.example.com -> https://www.example.com

它也应该适用于以下情况,但它不起作用

www.example.com -> https://www.example.com

我已经完美地编写了所有 htaccess 规则,但是当我添加 www 重定向规则时,负载均衡器状态变为 OutService。当我删除该规则时,它可以正常工作。

正常情况下的工作 .htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

当我为 www.example.com 添加规则时 -> https://www.example.com

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

【问题讨论】:

  • 你能告诉我那个 OutService 负载均衡器的状态消息吗?
  • 好的,我会附上的
  • 实例至少连续失败了 UnhealthyThreshold 次数的健康检查。 - 停止服务
  • 是的,但我没有使用 Nginx

标签: amazon-web-services .htaccess


【解决方案1】:

这可能是因为您的经典 ELB 健康检查是在 HTTP 上设置的,并且它期望来自服务器的 200 好的回复,但由于重定向规则,它得到 302/301。 一种解决方案是使用 TCP 进行健康检查,它只会检查 SYN、SYN+ACK,然而,更健壮的解决方案是使用应用程序负载均衡器,您可以选择自己的成功健康检查状态码 (2xx,3xx)并且您不需要后端的重定向规则,ALB 提供了可用于上述所有目的的重定向规则。

【讨论】:

  • James Dean,我已将我的实例从经典实例移至应用程序负载均衡器。现在我应该如何将当前实例绑定到应用程序负载均衡器?
  • 您需要创建一个目标组并将您的实例添加到其中,目标组将被添加到负载均衡器中。 docs.aws.amazon.com/elasticloadbalancing/latest/application/…
  • 我在为 www.example.com -> example.com 编写规则时尝试了同样的方法并遇到了同样的问题。它返回 301 健康检查,当我删除该规则时,它返回 200
  • 我已经通过更改 htaccess 规则解决了这个问题。所以问题只针对健康检查,并解决我们需要绕过健康检查规则。
  • @chirag 很高兴您解决了问题并创建了绕过健康检查路径,但如果应用程序出现问题并且健康检查仍然通过,您以后会看到问题。
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2015-12-06
  • 2020-12-21
相关资源
最近更新 更多