首页 > 解决方案 > Gatsby 站点在 EC2 上使用 pm2 节点和 aws 经典负载均衡器服务需要 https

问题描述

我在开发模式下运行 Gatsby 站点作为 EC2 上的开发服务器,负载均衡器从端口 80 指向 8000。我在我的域 dns 上设置了一个 cname 以指向负载均衡器,这工作正常。但是,我需要将此页面显示为 sanity.io 中的 iframe 作为网络预览,并且它需要 https。

我已通读此https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-create-https-ssl-load-balancer.html,其中大部分内容在大多数情况下都非常简单。

到目前为止,我所做的是在负载均衡器上为 443 https 创建了一个侦听器,并将 https 443 添加到安全组中。我已成功向我与 aws 一起使用的子域颁发了证书,并将其附加到负载均衡器侦听器。

Gatsby 有一篇关于开发模式的自定义证书的文章https://www.gatsbyjs.org/docs/local-https/#custom-key-and-certificate-files我要找的是证书文件,授权文件和密钥文件,以便在下面传递此命令

我在 aws 证书管理器中的哪里可以找到这些文件。我认为这是我需要让 https 工作的最后一部分,如果我错了,请纠正我。

提前谢谢。

gatsby develop --https --key-file ../relative/path/to/key.key --cert-file ../relative/path/to/cert.crt --ca-file ../relative/path/to/ca.crt

这是我用来请求我的证书的过程,它说它已发布 https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html

但是如何将它与 gatsby 的自定义 https 命令一起使用?

有一个导出选项,但它只表示私钥。我需要创建一个私钥然后我可以导出我需要的这些文件吗?

我什至需要在 gatsby 这边运行 https。我使用 apache 观看了一个视频,并且没有对 apache 服务器进行任何更改以使 https 与负载平衡器一起工作。

这是我的负载平衡器侦听器的屏幕截图

在此处输入图像描述

这是我的安全组的图像

在此处输入图像描述

如果我运行--httpsfor gatsby develop 它会破坏我的站点,我将无法再通过负载均衡器或端口 8000 访问它。所以不知道在这里做什么。

标签: amazon-web-servicessslamazon-ec2gatsbyamazon-elb

解决方案


我建议不要加密您的 ELB 和 EC2 实例之间的连接。如果您的 EC2 实例不可公开访问,而只能通过负载均衡器访问,则最佳做法是终止负载均衡器上的 SSL 连接。无需在 AWS VPC 内(即 ELB 和目标实例之间)加密 HTTP 请求。

您可以创建一个同时侦听 HTTP (80) 和 HTTPS (443) 端口的负载均衡器。如果您指定 HTTPS 侦听器向端口 80 上的实例发送请求,负载均衡器将终止请求,并且从负载均衡器到实例的通信不会加密。[1]

有一些讨论(例如在 Kevin Burke 的博客上)是否有必要加密 VPC 内的流量。[2] 然而,大多数人可能没有这样做。

这对您意味着什么:为您的目标使用与以前相同的实例协议:两个侦听器通过端口 8000 的 HTTP。不要为您的 Gatsby 服务设置 SSL。请改用普通的 HTTP 服务器配置。在负载均衡器上使用 SSL 终止时,无需更改 ELB 目标。

参考

[1] https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-create-https-ssl-load-balancer.html
[2] https://acloud.guru/forums/aws-certified -security-specialty/discussion/-Ld2pfsORD6ns5dDK5Y7/tlsssl-termination?answer=-LecNy4QX6fviP_ryd7x


推荐阅读