如何在AWS EC2中为在docker上运行的node.js服务器设置https

时间:2020-09-02 12:32:40

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

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

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

  1. 我已在ec2实例上设置了一个负载均衡器,目标是https端口433。
  2. 我有一个带aws证书管理器的证书,域名为* .example.com。由aws发布。
  3. 由于要通过docker访问我的应用程序,我需要对docker做任何事情吗?是否需要任何启用https的配置?

现在这就是我被卡住的地方。从this documentation中可以看到,我需要服务器中的证书副本,才能与服务器一起使用https。

  1. 我从哪里获得此副本?因此我可以将其放入服务器中。我什至需要这样做吗?
  2. aws证书管理器中的证书是否与证书颁发机构颁发的其他任何证书相同?是,如何查看https加密中使用的私钥和公钥?

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

1 个答案:

答案 0 :(得分:0)

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());
相关问题