Подтвердить что ты не робот

Как сделать Node.js Multi-tenant для сайтов на порту 80?

Моя конечная цель - сделать node.js более рентабельным для каждого экземпляра сервера.

У меня не работает игра или чат, а довольно простые сайты для клиентов. Я хотел бы разместить несколько клиентов на одном сервере, но у вас есть несколько веб-сайтов, запущенных с порта 80 с использованием сопоставления заголовков хоста. Я бы хотел использовать экспресс, как я делаю, но если бы это было возможно, это скорее похоже на маршрутизацию из порта 80 в другие приложения node. node может быть дешевле, если он будет выполнен таким образом, но в настоящее время он будет более дорогим для моих целей, поскольку каждый клиент будет нуждаться в собственной коробке, если работает на порту 80. Также моя мотивация заключается в том, чтобы сосредоточиться на разработке node, но должно быть причина сделать это с точки зрения стоимости.

Я делаю это довольно много для ASP.NET в Windows, поскольку IIS поддерживает это из коробки, и я знаю, что это тоже нормально для Apache.

Не стесняйтесь переместить это на другой форум в обмене стеками, если это не правильный вопрос или дать конструктивную критику, а не случайную нисходящую. Спасибо.

Обновление

Подход, который я принял, состоял в том, чтобы использовать статический хостинг (через gatspy и s3), а затем API, который зарегистрировал домены через почтовое сообщение от клиента и ключи API от сервера и периодически генерирует статические сайты, поскольку сайты меняются, но спасибо за все предложения!

4b9b3361

Ответ 1

В теории вы могли бы создать веб-сервер pure- Node, который эмулировал функциональность Apache/Lighttpd/Nginx, но я бы не рекомендовал его. На самом деле, для серьезных услуг по производству, я бы рекомендовал ALWAYS работать с Nginx или эквивалентом (см. this и this).

Здесь, как простой Nginx config будет работать для двух подсервисов, открытых на порту 80.

worker_processes  4;

events {
  worker_connections 1024;
}

http {
  include       mime.types;
  default_type  text/html;

  server {
    listen 80;
    server_name service1.mydomain.com
    location / {
      proxy_pass         http://127.0.0.1:3000/;
    }
  }
  server {
    listen 80;
    server_name service2.mydomain.com
    location / {
      proxy_pass         http://127.0.0.1:3001/;
    }
  }
}

Я видел патчи ядра ядра, потому что Node не дросселирует нагрузку по умолчанию и приоритизирует прием новых подключений по обработке существующих запросов - предоставляется, "не должно" разбивать ядро, но это произошло. Кроме того, работая на порту 3000, вы можете запустить службу Node как не-root с очень небольшим количеством разрешений (и по-прежнему прокси-сервер так, чтобы она отображалась на порту 80). Вы также можете распространять нагрузку между несколькими работниками, обслуживать статику, запросы журналов, переписывать URL-адреса и т.д. И т.д. И т.д. Nginx очень быстр (намного легче, чем Apache). Накладные расходы на пересылку прокси-сервера такого же размера минимальны и покупают у вас столько функциональности и надежности, что это захлопывание в моей книге. Даже незначительные вещи, например - когда я разбиваю или перегружаю мой сервис Node, пользователь получает черную дыру или всплывает "pardon our dust, наши серверы".

Ответ 2

Как использовать правильный обратный прокси, например HAProxy, прокси-сервер прослушивает порт 80 и делегирует его нескольким node экземпляры на не общедоступных портах (например, 10000, 10001 и т.д.) на основе headers.host?