【发布时间】:2020-09-20 09:26:23
【问题描述】:
我在一个主机上有两个节点服务器。一台 HTTP 服务器负责重定向到 HTTPS,一台 HTTPS 服务器负责为我的应用程序提供服务:
const express = require('express');
const https = require('https');
const http = require('http')
const fs = require('fs');
const app = express();
const httpsOptions = {
key: fs.readFileSync('./local-ssl/key.pem'),
cert: fs.readFileSync('./local-ssl/cert.pem'),
passphrase: '*****'
}
//other stuff
http.createServer(function (req, res) {
res.writeHead(301, { "Location": "https://" + req.headers['host'] + req.url });
res.end();
}).listen(80);
https.createServer(httpsOptions, app).listen(443)
这在本地效果很好。
问题是,当我在 AWS EC2 上部署此代码并运行这些服务器时,您无法在端口 80 和 443 上启动服务器。我试图弄清楚如何解决这个问题。如果我在不同的端口上运行它们,服务器将不会响应,更糟糕的是,重定向不正确。
示例: 如果我在 8081 上提供 HTTP 并在 8443 上提供 HTTPS,当发生重定向时,代码将重定向到
https://my-fun-url.com:8081
这当然不起作用,因为我没有响应端口 8081 上的 HTTPS。
现在,我已经探索了端口转发选项,但是这将如何工作?如果我将端口 80 和 443 转发到内部端口(比如说)3000 和 4000,则会出现相同的重定向问题。
我已经在互联网上搜索了很长时间,对我来说,这是任何网络应用程序的简单要求。非常感谢有关我的策略的详细指导。
【问题讨论】:
标签: node.js express ssl amazon-ec2 https