繁体   English   中英

为 nodejs express 应用侦听 EC2 上端口 3000 的 HTTPS 请求

[英]Listen for HTTPS requests to port 3000 on EC2 for nodejs express app

我有一个 nodejs 应用程序,它使用 express 来监听 3000 次请求,如下所示:

var express = require('express');
var app = express();
app.listen(3000, function () {
   console.log('Running on port 3000')
});

当我使用 ngrok 在本地运行服务器时,这适用于 HTTPS 请求。 但是在 EC2 上运行 nodejs 应用程序时,我无法通过 HTTPS 访问此端口。 我的实例设置的安全组如下:

在此处输入图片说明

我可以在普通 HTTP 上访问端口 3000,但不能在 HTTPS 上访问端口,有人知道我哪里出错了吗?

MattTheHack,默认情况下,我相信 Express 通过 HTTP 服务器进行侦听。 您可以在这里做两件事,第一件事是将您的 node express 应用程序部署为 HTTPS 服务器,这需要正确的密钥才能进行设置。

类似于以下内容:

var express = require('express')
var fs = require('fs')
var https = require('https')
var app = express()

app.get('/', function (req, res) {
  res.send('hello world')
})

https.createServer({
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.cert')
}, app)
.listen(3000, function () {
  console.log('Example app listening on port 3000! Go to https://localhost:3000/')
})

这不是真正推荐的,因为节点正在解密所有 HTTPS 流量。

推荐的解决方案是将 NGINX 或其他一些路由工具也放在服务器上。 然后,您可以将 NGINX 视为代理并允许 NGINX 为您进行解密。 您的节点应用程序仍然可以作为 HTTP 服务器侦听端口 3000,而 NGINX 只是将 HTTPS 端口 443 流量重定向到 localhost:3000

配置文件

http {
  server {
    listen 443 ssl;
    ssl_certificate      "PATH_TO_CERT";
    ssl_certificate_key  "PATH_TO_CERT_KEY";

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
  }
}

我肯定会推荐第二种方法! 祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM