【问题标题】:How to redirect from port 80 to 443 with amazon EC2 using AWS certificate from ACM?如何使用来自 ACM 的 AWS 证书使用亚马逊 EC2 从端口 80 重定向到 443?
【发布时间】:2020-02-18 14:54:14
【问题描述】:

我目前有一个 react/node 应用程序位于 /home/ubuntu 的 EC2 ubuntu 实例中。该服务器是一个在端口 443 上侦听的 https 服务器。当我点击我的公共 DNS 时,它仅在我在我的 dns 之前添加 https:// 时才会出现。它按预期工作(没有它,它默认为端口 80 并且应用程序不显示,这是预期的)。

我有一个由亚马逊和亚马逊证书管理器生成的证书。如何将所有流量从端口 80 重定向到端口 443 并将我的亚马逊证书集成到我的实例中?

【问题讨论】:

    标签: amazon-web-services ubuntu ssl amazon-ec2 amazon-elb


    【解决方案1】:

    因此,多亏了 Adiii,他为我指明了正确的方向。我所做的是为我的实例创建一个弹性 IP(非常简单),然后将我的实例放在弹性负载均衡器(亚马逊 ELB)后面(也很简单),我将 ELB 中的端口从 443 设置为 443、80 到 80。我在 443 到 443 端口重定向上添加了我的证书。

    我已经配置了我的实例并运行了应用程序,因此我引用了 /index.html 进行运行状况检查,以使其与 ELB 一起使用。我的应用程序在端口 443 上运行。我添加了一个 http_redirect.js 服务器文件,监听端口 80。

    const express = require('express');
    const http = require('http');
    const app = express();
    
    // set up a route to redirect http to https
    app.get('*', function(req, res) {  
        res.redirect('https://' + req.headers.host + req.url);
    })
    
    http.createServer(app).listen(80, () => {
        console.log('redirect-server up and running on port 80');
    });
    

    它只是重定向到 https 的 443 端口。 有了这个,我可以使用来自 AWS 的免费证书,还可以使用 express/node 从 http 重定向到 https。

    【讨论】:

      【解决方案2】:

      您可以尝试两种选择。

      • AWS ABL 重定向
      • Nginx

      我更喜欢 ALB,因为您不需要在实例级别公开端口,而且您不会在实例上管理任何代理。

      如果您使用 ALB,您可以从 LB 规则重定向到 https。一条规则 必须有条件和行动。因为我们要重定向所有 通过 80 端口进入相同 URI 的流量,仅使用 HTTPS 相反,我们的条件应该是简单的“全部”。不幸的是你不能 只需在条件中加上一个星号,这是我最近的一次 能想出的是*.example.com,其中xample.com是 无论您的域名是什么。

      aws-alb-redirects

      如果你没有使用 ALB,那么你可以试试 Nginx。

      • 你需要在你的服务器上安装 Nginx
      • 在您的实例中允许端口 80
      • 在 nginx.conf 中放置下面的配置

      这将重定向所有

      server {
          listen 80 default_server;
      
          server_name _;
      
          return 301 https://$host$request_uri;
      }
      

      这将重定向特定站点。

      server {
          listen 80;
      
          server_name example.com;
          return 301 https://example.com$request_uri;
      }
      

      redirect-http-to-https-nginx

      您的问题的另一个澄清

      如何将我的亚马逊证书集成到我的实例中?

      不可以,不能在 EC2 实例中使用 AWS 证书,需要将 LB 放在 Instance 顶部才能使用 AWS 证书。

      【讨论】:

      • 谢谢,这正是我想要的。
      【解决方案3】:

      您需要在节点应用程序中将 HTTP 重定向到 HTTPS。网上有很多关于如何做到这一点的例子,例如:Automatic HTTPS connection/redirect with node.js/express

      【讨论】:

        猜你喜欢
        • 2018-12-12
        • 2012-09-09
        • 1970-01-01
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 2015-01-23
        相关资源
        最近更新 更多