AWS 负载均衡器将 www.example.com 重定向到 example.com 不起作用

Posted

技术标签:

【中文标题】AWS 负载均衡器将 www.example.com 重定向到 example.com 不起作用【英文标题】:AWS load balancer redirect www.example.com to example.com isn't working 【发布时间】:2021-04-25 01:20:05 【问题描述】:

目前有一个弹性豆茎环境。

我已经进入了 EC2 下的负载均衡器设置,弹性 beantalk 就在上面。

从那里我选择了唯一的负载均衡器 > 侦听器 > 查看/编辑 80 和 443 端口的规则。

我继续添加主机标头为www.example.com的规则

我还添加了一个 行动:重定向https 端口:443 自定义主机、路径、查询:主机是 example.com 选择的重定向是 301。

我继续为 80 和 443 听众“添加操作”。

问题是它不起作用,当我转到http://www.example.com 或https://www.example.com 时,它不会转到https://example.com

http://example.com 确实转到 https://example.com

【问题讨论】:

您在 EB 环境中运行什么?你用的是什么网络服务器? @markwalker_ 我正在运行一个简单的 nextjs 网络应用程序 【参考方案1】:

您可以将文件添加到 elasticbeanstalk 将查找的文件以修改堆栈。

为此,首先将一个名为 .ebextensions 的文件夹添加到项目的根目录中。

.ebextensions 文件夹中创建一个名为http-to-https-redirection.config 的文件(或者您会认识的其他名称)。然后在这个文件中粘贴以下内容(这是官方AWS config)

Resources:
  AWSEBV2LoadBalancerListener:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
      DefaultActions:
        - Type: redirect
          RedirectConfig:
            Protocol: HTTPS
            Port: '443'
            Host: '#host'
            Path: '/#path'
            Query: '#query'
            StatusCode: HTTP_301
      LoadBalancerArn:
        Ref: AWSEBV2LoadBalancer
      Port: 80
      Protocol: HTTP
  AWSEBV2LoadBalancerListenerHTTPS:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
      Certificates:
        - CertificateArn: Replace with Certificate ARN
      DefaultActions:
        - Type: forward
          TargetGroupArn:
            Ref: AWSEBV2LoadBalancerTargetGroup
      LoadBalancerArn:
        Ref: AWSEBV2LoadBalancer
      Port: 443
      Protocol: HTTPS

您只需要填写适合您所做的重定向详细信息。

AWS 在 github 上提供更多示例配置文件; https://github.com/awsdocs/elastic-beanstalk-samples

【讨论】:

【参考方案2】:

official document 说你做得对。所以这不是 ALB 问题。

我认为您的 EB 配置有问题(或者可能是 @MarkB 在 cmets 中所说的 DNS)。

目前,我只能说,如果你不配置任何东西,基本上www.example.com与example.com无关

您的“两个”域(www.example.comexample.com)是否指向由 EB 托管的同一页面?

【讨论】:

我该如何诊断? 那不是EB配置问题,而是DNS配置问题。 @MarkB 你的意思是我应该去路由 53,去指定的托管区域,创建一条 A 记录并将别名指向负载均衡器吗? @MarkB 您能回答一下您对 DNS 的哪个问题有疑问吗?也许它可能是由 DNS 引起的,但我不知道这种方式。 @ShaunChua 其实还有很多其他的方法可以做你想做的事。使用 Route53 可能就是其中之一。但我更感兴趣的是了解为什么您的方法不起作用。

以上是关于AWS 负载均衡器将 www.example.com 重定向到 example.com 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将负载均衡器添加到没有负载均衡器的现有 AWS Elastic Beanstalk 应用程序?

在 AWS 中,如何将 Web 服务器安全组配置为仅接受来自 AWS 中的负载均衡器的流量?

使用 AWS 负载均衡器将来自 EKS 的 FastAPI 公开给外部世界

AWS 通过弹性负载均衡器发送 http 请求

如何将目标(不在 AWS 上)注册到网络负载均衡器?

如何将域中的多个路径重定向到不同的 AWS 负载均衡器?