【问题标题】: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】:
您可以尝试两种选择。
我更喜欢 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 证书。