【问题标题】:How to configure single ec2 instance in elastic beanstalk with https如何使用 https 在弹性 beantalk 中配置单个 ec2 实例
【发布时间】: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 服务器配置文件。

标签: node.js amazon-web-services amazon-ec2 amazon-elastic-beanstalk


【解决方案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();
    }
  })

【讨论】:

    猜你喜欢
    • 2019-07-03
    • 2018-05-09
    • 2013-11-29
    • 2015-09-02
    • 1970-01-01
    • 2017-09-03
    • 2016-08-10
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多