Gatsby 站点在 EC2 上服务,带有 aws 经典负载均衡器的 pm2 节点需要 https

Gatsby site serving on EC2 with pm2 node with aws classic load balancer needs 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 命令一起使用呢?

有一个导出选项,但它只针对私钥。我是否需要创建私钥,然后才能导出我需要的这些文件?

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

这是我的负载均衡器监听器的截图

这是我的安全组的图片

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

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

You can create a load balancer that listens on both the HTTP (80) and HTTPS (443) ports. If you specify that the HTTPS listener sends requests to the instances on port 80, the load balancer terminates the requests and communication from the load balancer to the instances is not encrypted. [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