如何使用 https 在弹性 beantalk 中配置单个 ec2 实例

Posted

技术标签:

【中文标题】如何使用 https 在弹性 beantalk 中配置单个 ec2 实例【英文标题】:How to configure single ec2 instance in elastic beanstalk with https 【发布时间】:2020-08-29 19:54:11 【问题描述】:

到目前为止,拥有 https 的最简单方法是在弹性 beanstalk 中使用负载均衡器,最近他们创建了一篇文章,其中陈述了以下内容。

您可以使用配置文件来配置将流量传递到您的应用程序以终止 HTTPS 连接的代理服务器。如果您想在单实例环境中使用 HTTPS,或者如果您将负载均衡器配置为在不解密的情况下通过流量,这将非常有用。

要启用 HTTPS,您必须允许端口 443 上的传入流量到达运行 Elastic Beanstalk 应用程序的 EC2 实例。为此,您可以使用配置文件中的 Resources 键将端口 443 的规则添加到 AWSEBSecurityGroup 安全组的入口规则中。

以下 sn-p 向 AWSEBSecurityGroup 安全组添加了一个入口规则,该规则将端口 443 开放给单个实例环境的所有流量:

.ebextensions/https-instance-securitygroup.config

Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: "Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0

他们要求您将另一个弹性 beanstalk 配置文件包含在您的 .ebextensions 文件夹中,可以在此处找到 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-singleinstance-nodejs.html

将私钥内容替换为用于创建证书请求或自签名证书的私钥的内容。

我已经完成了在 ebextensions 文件夹中创建的配置文件中添加私钥内容和公共证书的步骤。部署有效,但是当我转到弹性 beanstalk url 时,它不是 https。

【问题讨论】:

我建议使用application load balancer 而不是classic load balancer,因为您可以轻松地在application load balancer 设置中设置重定向规则,而无需像您一样覆盖Web 服务器配置文件。 【参考方案1】:

您链接的 nginx 配置只会为端口 443 添加另一个侦听器。它不会自动将 http 流量重定向到 https 端点。你可以试试你的应用程序的 https 版本,看看它是否有效?

您可以覆盖端口 80 的配置,但更简单的解决方案可能是在您的应用程序代码中处理它。如果您查看端口 443 的配置,它会向您的 node.js 应用程序发送一个 X-Forwarded-Proto 标头。

我认为这篇博文可能会对你有所帮助:http://blog.lookfar.com/blog/2017/07/19/how-to-https-all-the-things-in-node/

  app.use(function(req, res, next)
    if(req.header('x-forwarded-proto') !== 'https')
        res.redirect('https://' + req.header('host') + req.url);
    else
        next();
    
  )

【讨论】:

以上是关于如何使用 https 在弹性 beantalk 中配置单个 ec2 实例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用弹性 beantalk 加密负载均衡器和 Web 服务器之间的流量

如何将自签名证书分配给 AWS 弹性 beantalk 应用程序

如何使用弹性 beantalk 中的 express.js 进行反应构建?

如何在 AWS EC2 弹性 beantalk 中使用命令

如何在自动缩放的弹性 beantalk 实例中更新文件

如何修复弹性beantalk实例上的“使用这些代码失败的健康检查:”?