使用 Elastic Beanstalk 的 AWS SSL 证书:无法访问 HTTPS 站点

AWS SSL certificate with Elastic Beanstalk: HTTPS site not reachable

当我将 AWS 证书与我的 Elastic Beanstalk 应用程序相关联并使用 https 访问域时,我得到 'This site can’t be reached, mydomain.com refused to connect.' 我可以使用 http 访问该站点。

我使用 AWS 的 ACM 创建了一个安全证书。我添加了我的域名 example.com,以及作为证书子域的其他名称。在我的应用程序环境 'Loading balancing' 部分中,我进行了设置:

我为我的环境设置名为 awseb-e-abc123-stack-* 的安全组,如下所示:

还有一个名为awseb-e-abc123-stack-AWSEBLoadBalancerSecurityGroup-*的安全组,如下。和上面组有同名标签,和我的环境名一样:

不过,似乎 "AWSEBLoadBalancerSecurityGroup" 安全组的条目没有任何作用,因为删除所有条目仍然允许 HTTP 流量工作。

.elasticbeanstalk\securelistener.config中,我有以下

option_settings:
  aws:elb:listener:443:
    SSLCertificateId: <my certificate's ARN>
    ListenerProtocol: HTTPS
    InstancePort: 80

不过,如果我在此文件中添加语法错误,部署仍然会成功。

这是 curl -vL https://<my domain> 的输出:

* Rebuilt URL to: https://<my domain>/
*   Trying <my elastic IP>...
* connect to <my elastic IP> port 443 failed: Connection refused
* Failed to connect to <my domain> port 443: Connection refused
* Closing connection 0
curl: (7) Failed to connect to <my domain> port 443: Connection refused

我使用了单独的域名注册来设置我的域名,并将我的域的 DNS A 记录 IP 地址设置为等于我的弹性 IP。

[编辑]

我在上面提到过,更改负载均衡器安全组的规则没有任何作用。这是因为我的 EC2 实例的安全组指向实例的安全组,而不是负载均衡器的安全组。当我将 EC2 的安全组指向负载均衡器的安全组时,安全组的规则被执行。我通过从负载均衡器安全组中删除所有规则来验证这一点,并看到没有请求被接受。但是,如果我将 HTTP 和 HTTPS 规则添加回负载均衡器安全组,但从实例安全组中删除所有规则,则所有 HTTP 请求都会通过。这不是预期的行为,因为负载均衡器应该将流量转发到实例。似乎正在发生的事情是 (1) 实例和负载均衡器安全组与实例和负载均衡器完全无关,并且 (2) 没有流量流向负载均衡器。

我还有什么遗漏的吗?

[编辑 2]

我误读了 gkrizek 的评论。如果我使用负载均衡器的 public DNS,我可以使用 HTTP 或 HTTPS 进行连接。我可以使用 telnet 连接到两个版本。因此,我没有创建将 testdomain.com 设置为我的弹性 IP 的 A 记录,而是创建了一个 sub.testdomain.com CNAME 记录集到负载均衡器。现在我可以浏览 http://sub.testdomain.comhttps://sub.testdoamin.com。两个问题:

问题是您必须使用您的域创建 CNAME 记录并将负载平衡器 DNS 名称用作地址。如果您使用弹性 IP,请求将不会转到负载均衡器。

回答我最后的问题:

  • AWS says这个可以
  • 您不能直接执行此操作,因为 AWS 不允许您将弹性 IP 分配给负载均衡器。你可以做的是有一个 URL 记录重定向 testdomain.com 到 https://www.testdomain.com