Прослушивание HTTPS-запросов на порт 3000 на EC2 для приложения nodejs express - PullRequest
0 голосов
/ 24 октября 2018

У меня есть приложение nodejs, которое использует express для прослушивания 3000 запросов, например:

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

Это работает для запросов HTTPS, когда я запускаю сервер локально с помощью ngrok.Но при запуске приложения nodejs на EC2 я не могу подключиться к этому порту через HTTPS.У меня есть группа безопасности для установки моего экземпляра следующим образом:

enter image description here

Я могу подключиться к порту 3000 по обычному HTTP, но не по HTTPS, любой знает, где я 'я иду не так?

1 Ответ

0 голосов
/ 24 октября 2018

MattTheHack, по умолчанию я полагаю, что Express слушает через HTTP-сервер.Здесь вы можете сделать две вещи, первая из которых заключается в развертывании приложения экспресс-узла в качестве 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 выполнять расшифровку за вас.Приложение вашего узла все еще может прослушивать порт 3000 как HTTP-сервер, и NGINX просто перенаправляет трафик HTTPS через порт 443 на локальный хост: 3000

nginx.conf

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;
    }
  }
}

Я бы определенно рекомендовал второйподход!Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...