当我将 AWS 证书与我的 Elastic Beanstalk 应用程序关联并使用 https 访问域时,我收到“无法访问此站点,mydomain.com 拒绝连接。” 我可以使用http访问该网站。
我使用 AWS 的 ACM 创建了一个安全证书。我将我的域名 example.com 以及作为子域的其他名称添加到证书中。在我的应用程序的环境“负载平衡”部分中,我进行了设置:
我设置了为我的环境命名的 SecurityGroup 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 请求都会通过。这不是预期的行为,因为负载均衡器应该将流量转发到实例。
还有什么我想念的吗?
[编辑 2]
我误读了 gkrizek 的评论。如果我使用负载均衡器的公共 DNS,我可以使用 HTTP 或 HTTPS 进行连接。我可以使用 telnet 连接到这两个版本。因此,我没有创建将 testdomain.com 设置为我的弹性 IP 的 A 记录,而是为负载均衡器创建了一个 sub.testdomain.com CNAME 记录集。现在我可以同时浏览http://sub.testdomain.com
和https://sub.testdoamin.com
。两个问题:
- 在 CNAME 记录中使用负载均衡器的公共 DNS 是否可以?我不能使用 *.elasticbeanstalk.com URL,因为它可能会改变,所以我想知道同样的情况是否适用于这里
- 我怎样才能保护
https://testdomain.com
(没有子域)。使用这种方法似乎是不可能的,https://testdomain.com
因为我无法创建带有域名的 A 记录。