使用Amazon AWS为虚拟设置HTTPS

我为我托pipe的网页运行Amazon AWS设置。 它使用单个EC2实例,并且可以在HTTP上正常工作。 但是最近我还需要提供HTTPS。 这是我完全困惑的地方。 EC2实例在Linux上运行Apache,PHP和MySQL

我有点(抽象地)了解HTTPS在非AWS领域的工作原理。 (我从来没有这样做过)。但是我认为这不是使用AWS实现的最好方式,这似乎涉及到在证书pipe理器中设置一些东西,然后将Elastic Load Balancer连接到它。 我有点不知所措

我在证书pipe理器中成功创build了一个证书。 我设立了一个看似合适的“目标”组的ELB,并把它连接到证书上。 当我尝试在主机前添加https://时,表示服务器拒绝连接。 当我进入ELB本身并访问它为ELB提供的URL时,我得到一个错误503服务临时可用。

我想我可能只是不理解这个权利,这里的AWS / HTTPSpost似乎都假设你知道你正在努力完成什么。 有人能为我解释这些事情(证书,ELB,EC2实例和Apache)是如何连接在一起的吗? 谢谢。

如果你运行一个单独的ec2实例,恕我直言,不需要使用ELB 。 如果您想使用ELB按照本指南进行操作 。

如果你想直接连接到你的ec2实例没有ELB设置https你的Apache像这样:

 LoadModule ssl_module modules/mod_ssl.so Listen 443 <VirtualHost *:443> ServerName www.example.com SSLEngine on SSLCertificateFile "/path/to/www.example.com.cert" SSLCertificateKeyFile "/path/to/www.example.com.key" </VirtualHost> 

看看文档的详细说明。

很有可能你在ELB端configuration了https错误,或者你试图通过https连接到你的实例,而实例的IP不是ELB的ip。

首先,不要觉得你必须停下亚马逊证书pipe理器(ACM)/负载平衡器路线。 这是一个很好的解决scheme,但它适用于在负载均衡器后面有几台服务器的情况,而不是一个独立的实例。

另一个可能更便宜的选项可能是在您的站点前使用Cloudfront,使用ACM证书,或使用Lets Encrypt实例本身。

这就是说,你问过LB,所以我们走

如果您对AWS中的负载均衡器不熟悉,则首先必须了解有两种types:ELB和ALB。

ELB(弹性负载平衡器)是旧式的“经典风格”负载均衡器,基本上通过平衡器来中继连接,而没有任何花哨的逻辑。 你把它扔在任何数量的实例前面,然后到达池中的随机服务器。

ALB(应用程序负载均衡器)稍微复杂一些,因为它们可以执行一些应用程序逻辑路由。 在使用ALB时,您可以定义目标组以及路由规则,这意味着您可以根据请求path将stream量发送到不同的实例组。 ALB可以以类似ELB的方式使用,而AWS似乎在推动其使用。

无论您使用哪种types的LB,您仍将平衡器放在实例前,将stream量中继到源计算机。

在讨论AWS LB时,HTTPS / SSL稍微复杂一点,因为它们的configuration方式稍有不同。

如果您正在使用ELB,AWS界面中的侦听器选项卡允许您configuration端口映射。 这是您将“人们的要求”映射到“来自哪里”的地方。 在这种情况下,你可能需要80 – > 80,443 – > 80.因为你想听http和https,但只连接到服务器上的http,因为它没有https。 对于更高级和安全的configuration,您可以在服务器上安装一个自签名证书,以端到端的方式encryption连接,然后使用443 – > 443。

ELB听众

如果您正在使用ALB,监听器选项卡将再次将“请求的人”映射到“来自哪里”,而不是映射端口,而是映射到“目标组”。 在大多数情况下,效果将与ELB相同,您将端口80和443连接到单个目标组。

ALB听众

ALB接口基本上将ELB接口的一部分拉到自己的页面上,但是ELB和ALB都试图在这里实现相同的事情,定义实例/目标和健康检查。 除非你有有效的目标和健康检查,否则你会得到503错误。

借助ELB,您可以定义要查看哪些“实例”。 实例选项卡将显示“状态”,这基本上是ELB是否将stream量路由到它。 这应该是“InService”,至less在一个实例上,或者你得到了503.如果你有任何其他的状态,尝试等待几分钟让它稳定下来,如果它没有更新到InService,你有什么问题您的实例,或者您尚未configuration有效的运行状况检查。

ELB实例

对于ALB,目标是以相同的方式定义的。 主要区别在于您定义了要连接到实例的端口,以及要连接的实例。 最常见的configuration方式是指向端口80上的实例,因为这是大多数Web服务器的运行方式,尽pipe在ELB的情况下,为了增强安全性,您可能希望在使用自己的实例上使用HTTPS签名的证书,以保持一切encryption的端到端。

与ELB类似,这里最重要的信息是目标状态,在这种情况下,您希望看到“健康”。 如果您没有看到,请稍等片刻,或调查您的健康检查。

目标群体

ALB和ELB都依靠运行状况检查来了解是否应将stream量路由到您的实例。 这通常很简单。 大多数人会configuration健康检查指向一个相当简单的页面,在您的网站上的东西,或您的网站的根,加载非常快,因为AWS会每分钟多次打它。 只有通过健康检查的实例才会获得转发的stream量。 默认是打到网站的根目录。 调整这些选项以最好地匹配您的网站很重要。 我经常会将健康线程设置为最小,以便让我的服务器尽可能快地提供stream量,并将轮询间隔缩短到更快。