Какой наилучший метод рекомендуется использовать node.js в рабочей среде? - PullRequest
0 голосов
/ 01 апреля 2019

Я создал приложение чата в node.js, используя порт 4000. Все работает отлично, но когда я развернул его в работе, я обнаружил, что многие корпоративные сети блокируют исходящий порт 4000. Я подумал об использовании других портов, которые будутболее вероятно, что он будет открыт в корпоративной сети, но затем обнаружил, что этот список портов заблокирован браузером Chrome:

https://superuser.com/questions/188058/which-ports-are-considered-unsafe-by-chrome

Использование таких портов, как 995, приведет к ошибке Chrome "ERR_UNSAFE_PORT "

Итак, похоже, что единственными разрешенными портами являются 80 и 443 для сервера node.js?Каков рекомендуемый метод выбора порта для приложения node.js в производственной среде?

Мой веб-сервер уже использует порты 80 и 443 для типичного веб-обслуживания Apache.Нужно ли создавать выделенный сервер только для node.js?

. Я использую следующий код для инициирования соединения браузера с сервером node.js:

var socket = io.connect('https://duplex.example.com:4000');

иВот код на стороне сервера:

const https = require('https');
const fs = require('fs');
var express = require('express')
  , bodyParser = require('body-parser');
var socket = require('socket.io');
var adminid = '';
var clientlist = new Array();
var port = 4000;

const options = {
    cert: fs.readFileSync('./fullchain.pem'),
    key: fs.readFileSync('./privkey.pem')
};

var app = express();

var server = https.createServer(options, app).listen(port, function(){
  console.log("Express server listening on port " + port);
});

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Большинство людей не выставляют свой сервер Node.js напрямую в Интернет, а используют Apache или Nginx в качестве внешнего прокси.

  1. Ваш сервер должен связываться только с localhost (или использовать правила брандмауэра, чтобы разрешить только входящие 80 и 443.

    server.listen('localhost', 4000)
    
  2. Настройте обратный прокси. Я использую Caddy :

    example.com {
        root /var/www/example.com
        # et cetera
    }
    duplex.example.com {
        proxy / localhost:4000 {
            websocket
        }
    }
    

    При прокси веб-сокета вы должны убедиться, что заголовки Connection и Upgrade не потеряны, что я и сделал с помощью ярлыка Caddy здесь.

    Вы также можете использовать тот же домен, что и основной сайт, и использовать только прокси с определенным путем.

  3. Подключите клиентский сокет .io к wss://duplex.example.com (через порт 443). (Я не знаком с socket.io, чтобы сказать, почему он использует URL-адрес HTTPS вместо WSS, но я предполагаю, что у вас это работает.)

0 голосов
/ 01 апреля 2019

443 и 80 являются основными портами для https и HTTP-трафика соответственно.

другие порты могут использоваться для WebSockets, но это не похоже на ваш вариант использования.

Что яв прошлом мы использовали обратный прокси-сервер, чтобы различать входящие URL-адреса и сопоставлять порты на моем компьютере без необходимости знать клиенту.

Обычно NGINX - самая легкая ставка для этого, если вына любом дистрибутиве linux.

здесь находится блог о том, как настроить обратный прокси-сервер для приложения узла с помощью nginx.

http://thejonarnold.com/configure-sails-js-with-subdomains-on-ubuntu/

статья ссылается на sailsjs,но в технике нет ничего конкретного.

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