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

StackOverflow https://stackoverflow.com/questions/9332865

Вопрос

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

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

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

родовое слово

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

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

РЕДАКТИРОВАТЬ: я планирую в конечном итоге использовать WebSockets и HTTPS, и объем пропускной способности, которую может поддерживать моя установка, не имеет для меня большого значения - это сервер разработки (по крайней мере, на данный момент). Спасибо Дэвиду Эллису за то, что он поднял вопрос о WebSockets.

ВТОРОЕ РЕДАКТИРОВАНИЕ: Спасибо ЭевуТову и Дэвиду Эллису за их ответы, оба из которых очень помогли. Я все еще определяю общую структуру своего приложения, и похоже, что этот вопрос более подробно рассматривается в этот вопрос StackOverflow

ТРЕТИЙ РЕДАКТИРОВАНИЕ: с тех пор, как я опубликовал этот вопрос, я нашел способы (хотя мне еще многое предстоит сделать). Посмотрите этот файл в моем репозитории GitHub , в котором Я узнал из ответов на этот вопрос!

Это было полезно?

Решение

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

родовое слово

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top