【问题标题】:How to set up https for a node.js server running on docker in aws EC2如何为在 aws EC2 中的 docker 上运行的 node.js 服务器设置 https
【发布时间】:2020-12-21 15:04:40
【问题描述】:

我有一个在 aws ec2 实例容器上运行的 dockerised node.js/express 应用程序。现在我的应用程序在 aws route 53 托管的域名上运行。当我转到域名时,使用的协议是 http。如何为在 aws EC2 中的 docker 上运行的 node.js 服务器设置 https?

这是我到目前为止所做的。

  1. 我在我的 ec2 实例上设置了一个负载均衡器,目标是 https 端口 433。
  2. 我有一个带有 aws 证书管理器的证书,其域名为 *.example.com。由 aws 发布。
  3. 我是否需要对 docker 执行任何操作,因为我的应用程序正在通过它访问。它是否需要任何支持 https 的配置?

现在这就是我卡住的地方。从this documentation 可以看出,我需要在我的服务器中提供一份证书副本,以便 https 与我的服务器一起使用。

  1. 我在哪里可以得到这个副本?所以我可以把它放在我的服务器上。我还需要这样做吗?
  2. 我的 aws 证书管理器中的证书是否与证书颁发机构颁发的任何其他证书相同?如果是,如何查看 https 加密中使用的私钥和公钥?

我是 devops 和 aws 的新手。如果您能从一开始就逐步概述您的答案,将不胜感激。我有一个 dockerised node.js/express 应用程序在 aws ec2 实例容器上运行,该容器可由 aws route53 托管域名访问。从这里如何将默认连接协议从 http 更改为 https?

【问题讨论】:

    标签: node.js amazon-web-services docker amazon-ec2 https


    【解决方案1】:

    Elastic Load Balancer 可以很好地为请求附加一个额外的请求标头 (x-forwarded-proto),它告诉我们请求来自哪个协议。我们可以在 Express 中间件中使用它来进行重定向:

    function forceHttps(req, res, next) {
        const xfp =
          req.headers["X-Forwarded-Proto"] || req.headers["x-forwarded-proto"];
        if (xfp === "http") {
          res.redirect(301, `https://${hostname}${req.url}`);
        } else {
          next();
        }
     }
    
    server.use(forceHttps);
    

    或使用 npm 包 https://www.npmjs.com/package/@crystallize/elasticloadbalancer-express-force-https

    const express = require('express');
    const forceHttps = require('@crystallize/elasticloadbalancer-express-force-https');
    
    const server = express();
    server.use(forceHttps());
    

    【讨论】:

    • 嘿,谢谢你的回答,但试过了,没有任何反应。当我console.log(xfp) 时,它又回来了undefined,当我尝试在浏览器上使用 https 输入域名 (example.com) 时,它说无法访问站点。你能否给我一步一步的指南,让我有一个新的运行的 ec2 实例,没有任何关于如何在 dockerised nodejs/express 应用程序上配置 https 的配置。谢谢。
    猜你喜欢
    • 2017-09-21
    • 2019-12-05
    • 2020-10-04
    • 2021-04-28
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多