Как организовать несколько серверов Express в одной системе?

Я использую один сервер для размещения нескольких узлов.JS web apps, которые распределены по нескольким доменам. Моя текущая практика состоит в том, чтобы запустить экспресс-сервер для каждого приложения на другом порту и запустить базовый сервер, который просто маршрутизирует (перенаправляет) запросы на правильный порт/Экспресс-сервер. Это работает, но это означает, что мой базовый сервер маршрутизирует каждый HTTP-запрос (и вручную перенаправляет его), и что мои пользователи видят мои приложения как размещенные на [hostname.com]:8000.

после небольшого исследования я обнаружил, что могу использовать http-proxy для моих потребностей маршрутизации, но я все равно хотел бы знать, есть ли лучшая практика для запуска нескольких серверов Express в одной системе. Вот как я планирую это сделать:

каждое веб-приложение будет иметь свою собственную папку с полной структурой папок Express (app.Яш, маршруты, мнения, и т. д.) Приложения будут сгруппированы по домену, поэтому пример структуры папок будет быть:

    hostname.com/
        app.js
        routes/
        views/
        ...
        app1/
            app1.js
            routes/
            views/
            ...
        app2
        ...
    hostname2.com/
        app.js
        routes/
        views/
        ...

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

вот мой текущий план. Каковы проблемы с ним, и какие подводные камни я должен стараться избегать? Самое главное, есть ли установленное решение этой проблемы-проблема хостинга несколько веб-приложений в одной системе с Node.js / Express?

EDIT: я планирую в конечном итоге использовать WebSockets и HTTPS, и объем пропускной способности, которую может поддерживать моя настройка, имеет для меня мало значения - это сервер разработки (по крайней мере, сейчас). Спасибо Дэвиду Эллису за то, что поднял вопрос о WebSockets.

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

третье редактирование: я прошел путь с момента публикации этого вопроса (хотя мне еще многое предстоит сделать). Проверьте этот файл в моем репозитории на GitHub, который использует то, что я узнал из ответов на этот вопрос!

2 ответов


Так как Express использует подключиться, Я уверен, что вы можете использовать промежуточное программное обеспечение виртуального хоста Connect. Он работает подобно другим модулям vhost на других продуктах. У меня нет нескольких доменов, чтобы проверить и показать вам правильный код, но я бы подумал, что это что-то вроде этого:

express.createServer()
.use(express.vhost('hostname1.com', require('/path/to/hostname1').app)
.use(express.vhost('hostname2.com', require('/path/to/hostname2').app)
.listen(80)

Если Вы дойдете до точки, где одного Экспресс-сервера недостаточно, посмотрите на использование узла.Кластер из API. Если этого также недостаточно, то текущая практика заключается в том, чтобы поставить asnyc обратный прокси-сервер, такой как Nginx перед вашими серверами Express и указать прокси-серверы Express.


Если вам не нужно использовать WebSockets (или любую функцию HTTP 1.1, действительно), вы можете использовать Nginx в качестве прокси-вместо.

преимущество заключается в том, что общая нагрузка NginX может обрабатывать по сравнению с узлом выше (статически компилируется и специализируется на такого рода вещах, в основном), но вы теряете возможность передавать любые данные (отправка меньших кусков за раз).

для меньшего сайта, или если вы не уверены, какие функции вам понадобятся в будущем, это, вероятно лучше придерживаться node-http-proxy и только переключитесь на NginX, если вы можете продемонстрировать, что прокси-сервер является узким местом на вашем сервере. К счастью, NginX не трудно настроить, если вам это нужно позже.