【问题标题】:How do you write an SSL redirect in NodeJS running on AWS EC2 without using port 80 (http) or port 43 (https)?如何在不使用端口 80 (http) 或端口 43 (https) 的情况下在 AWS EC2 上运行的 NodeJS 中编写 SSL 重定向?
【发布时间】: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


    【解决方案1】:

    如果您想保留端口 8081 和 8443,那么您只需在 host 标头中将 8081 替换为 8443:

    httpsHost = req.headers.host.replace('8081', '8443');
    res.writeHead(301, {
      "Location": "https://" + httpsHost + req.url
    });
    

    现在,我已经探索了端口转发选项,但是这将如何工作?如果我将端口 80 和 443 转发到内部端口(比如说)3000 和 4000,则会出现相同的重定向问题。

    不完全是。当有人导航到http://my-fun-url.com (80) 时,请求被转发到 3000。您的 http 服务器将响应重定向到 https://my-fun-url.com (443),该重定向将被转发到 4000,并且 https 服务器将从那里获取它。

    这两种方法的区别在于默认端口 80 和 443 是隐含的,因此可以从 URL 的主机部分省略。这使得重定向更容易,因为首先在主机中没有要替换的端口,只有协议部分(HTTP/HTTPS)。

    【讨论】:

    • 那么你推荐使用端口转发的方式吗?
    • 啊重定向有效,你知道为什么它会循环多次吗?
    • 通常就是这样。访问者在 URL 中键入端口会很尴尬。你是什​​么意思,循环是什么?
    • 我只是在函数中添加了一个console.log("hey"),它被调用了几次,但最终解决了
    猜你喜欢
    • 2019-02-02
    • 2013-06-28
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2019-03-01
    • 2016-09-17
    • 1970-01-01
    • 2015-04-28
    相关资源
    最近更新 更多