簡體   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