无法让 https 在 Elastic Load Balancer (AWS) 上工作

Posted

技术标签:

【中文标题】无法让 https 在 Elastic Load Balancer (AWS) 上工作【英文标题】:Can't get https working on Elastic Load Balancer (AWS) 【发布时间】:2015-04-14 01:09:11 【问题描述】:

我在 ec2-Classic 实例的前面有一个负载均衡器。我已通过直接链接到我的负载均衡器的“描述”选项卡中列出的 DNS 名称值来检查负载均衡器是否正常工作。这给了我位于 EC2 实例上的网页的主页。因此我的负载均衡器正在工作。我的负载均衡器和我的 EC2 实例位于同一个可用区。

我的负载均衡器设置了 SSL 证书,并且我设置了两个侦听器以将 http(端口 80)和 https(端口 443)作为 http 转发到实例端口 80。我的 EC2 实例有一个安全组设置为分别在端口 80 和 443 上接受带有 TCP 协议的 http 和 https。虽然我的理解是只有端口 80 才有用,对吧?证书的数据采用 pem 格式。我已在我的实例安全组中为 amazon-elb/amazon-elb-sg 添加了端口范围 0 - 65535 上的自定义 TCP。这没有任何作用。

我可以使用 http 访问我的网站。如果我尝试使用 https 访问,则会收到错误代码:Chrome 上的 ERR_CONNECTION_REFUSED 和 Firefox 上的无法连接。

我已经检查过类似的帖子来解决这个问题,但似乎没有任何帮助。

任何帮助或想法将不胜感激。谢谢

【问题讨论】:

你有没有想过这个问题?我遇到了完全相同的问题。 【参考方案1】:

经典负载均衡器和高级负载均衡器都有类似的问题。对我来说缺少的是,只有在您在 DNS 中为您的 SSL 所在的域与您刚刚创建的负载均衡器创建 A 记录之后,才能将 https 转换为 http 的东西。一旦我这样做了,通过那个新的 A 记录 DNS 一切都很好。您的实例不需要接受 443 端口,并且您的 LB 绝对不应该超过 443 转发。

希望这对您来说也很简单。

等等,什么是 PEM 格式的 SSL 证书?我使用了刚刚从下拉列表中获得的 Amazon SSL 证书。您确定您使用的是 SSL 证书吗?

【讨论】:

【参考方案2】:

在您的描述中,我看到您可能没有遵循 Amazon 的“Amazon EC2-Classic 中的弹性负载平衡->创建 HTTPS/SSL 负载平衡器”中的第 6 步 使用 AWS 管理控制台 -> 配置侦听器”指南。

那里,它说您应该在负载均衡器协议中配置“HTTPS (...) [和] HTTPS (Secure HTTP) (...) 在实例协议框中。”,而在您的配置中,您是将 ELB 的 443 转发到实例中的 80 端口。

为了进一步参考,这是我正在谈论的指南DEAD LINKhttp://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/configure-https-listener.htmlDEAD LINK

另外,检查您的 SSL 证书是否根据此处指定的规则正确构建:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html

【讨论】:

我相信您的指南适用于需要后端身份验证的情况。我正在尝试在负载均衡器上进行 SSL 身份验证。我的理解是,它然后通过端口 80 上的 http 与实例通信,对吗? 否,LB 收到的 HTTPS 流量将作为 HTTPS 流向实例。因此,您不能像指南所说的那样将其设置为 443 端口 80。您是否正在尝试实现一些性能调整? SSL 验证仍将在 LB 进行 你能用 HTTPS 设置 ELB 吗? 我对达尼洛的评论感到困惑。据我了解,ELB 的优点之一是实例不必配置 SSL。那么大概是转发了处理它的信息? @SamanthaAtkins,很遗憾听到我的回答和评论没有帮助并且令人困惑。如您所见,这是旧答案,并且链接/答案可能对当前的 AWS 版本无效。请投票以改善人们收到的相关答案。【参考方案3】:

您是否确定 ELB 位于允许端口 443 上 https 的安全组中?

【讨论】:

我能找到的文档提到了如何在 VPC 中为 EC2 处理这个问题。我不确定如何检查 EC2-Classic 中负载均衡器的源安全组的详细信息(或编辑它们)。在我的负载均衡器的选项卡中,它显示为“源安全组 amazon-elb/amazon-elb-sg”。我似乎能够编辑/读取的唯一安全组是实例安全组。 @bytesandwich 谢谢伙计,我在负载均衡器的入站规则上只有端口 80。完全错过了这一点。添加了 443,一切正常。负载平衡器接受 443 并与端口 80 上的实例进行通信。我相信这也是最初的问题。

以上是关于无法让 https 在 Elastic Load Balancer (AWS) 上工作的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Elastic Load Balancer 配置自动超时?

Amazon Codedeploy + Elastic Load Balancer - Windows 支持

AWS Elastic Load Balancing 和 Auto Scaling 之间的区别

AWS Cloudformation Elastic Load Balancing 账户 ID

在 AWS Elastic Load Balancer 后面使用 Primus.io (websockets)

使用 Spring Security requires-channel 和 Amazon Elastic Load Balancer 的登录循环