amazon-web-services - 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 与负载平衡器一起工作。
这是我的负载平衡器侦听器的屏幕截图
这是我的安全组的图像
如果我运行--https
for gatsby develop 它会破坏我的站点,我将无法再通过负载均衡器或端口 8000 访问它。所以不知道在这里做什么。
解决方案
我建议不要加密您的 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
推荐阅读
- php - Laravel CRUD 测试
- visual-studio-code - 如何在 Visual Studio Code Protractor 中处理 webdrivers?
- java - 空对象引用上的“java.lang.String java.lang.Object.toString ()”(Firebase)
- javascript - 无法通过 API 调用发送 Firebase QueryDocumentSnapshot
- flutter - 如何合并不同类型的 StreamController?
- c - (null) 将整数 12345 转换为字符串 "54321" 然后返回给 main 函数打印后打印
- java - hashMap的内部实现
- testing - 无法使用空手道打印提取的 xml 内容
- python - 冲突 - Python 插入更新到 Azure 表存储
- javascript - 如何在 JavaScript 中将表情符号图像转换为 Unicode,或反映给定 Unicode 的自定义表情符号?