如何让我的ELB通过SSL连接到在自定义端口上运行的应用程序?

嗨 – 我是一名SSL / HTTPS的初学者,如果我的术语/理解是有限的,我很抱歉。

我正在运行一个NodeJS应用程序,它是多个其他服务器的代理服务器(这是一个简单的负载平衡器,遵循本文中的代码)。

Node应用程序在端口7080上运行。 我有一个AWS Elastic Load Balancer,它监听端口80 ,并将请求(通过TCP)转发到端口7080 ,这一切都正常。

我一直在尝试添加SSL支持,并为我的域创build了Let's Encrypt证书(指向ELB端点)。 我将证书上传到了AWS,并添加了一个SSL侦听器,证书也转发到TCP 7080 。 这不起作用 – 请求超时。

在应用程序说明中,我遵循Node应用程序,它build议使用SSL证书文件configuration应用程序,并将这些设置传递给它创build的代理服务器。 我也试过,但有证书错误,我认为是因为我正在加载原始的EC2实例URL,而不是loadbalancer域(证书指向)。 我希望通过在负载平衡器级别终止SSL请求,我不需要configuration底层Node应用程序在SSL本身上运行。 我误解了这个吗?

正如我上面所说,我是新来的,仍然让我头脑发生什么事情。 任何提示将感激地收到。

首先,您可以说通过在AWS ELB中终止SSL,您无需担心在NodeJS应用程序上configurationSSL。 这是我常用的一种模式 – 您不需要在节点应用程序中configuration任何与SSL有关的事情。

其次,在AWS内部,我强烈build议您使用亚马逊的证书pipe理器来创build您的证书 – 这样做您不必担心续订问题,实际上,更容易(而且仍然是免费的)设置和维护比试图使用让我们encryption(这是伟大的,但更适合于AWS以外的应用程序)。 再次,我现在使用ACM证书 – 在生产中。

现在试图解决你的问题。

假设这在HTTP上按预期工作,使它在HTTPS上工作应该很简单。

我会检查的第一件事情是:

  • 确保您的负载均衡器上没有阻止访问端口443(我假设您的HTTPS侦听器正在侦听)的安全组。 ELB上的相关安全组将需要允许访问端口80和端口443
  • 检查你没有得到一个意外的redirect到使用浏览器devtools无法访问的东西,这可能是连接工作正常 – curlopenssl s_client可能会有助于进一步debugging

啊,自己解决了这个问题。 负载平衡器安全组没有打开端口443(EC2实例冗余)。