Там же несколько проблем есть вы решать сразу там:
Daemonization - сохраняя свое приложение до: Как уже упоминалось, сценарии, такие как forever
могут быть использованы для контроля приложения nodeJS перезапустить его сбою. Это полезно для запуска приложения в случае неудачного отказа.
Аналогичным образом recluster может использоваться для разветвления вашего приложения и повышения его устойчивости к сбоям путем создания процесса и подпроцессов супервизора.
Необязанные исключения: Известный барьер в nodejs заключается в том, что асинхронные ошибки не могут быть захвачены блоком try/catch. В результате исключения могут всплыть и привести к сбою всего вашего приложения.
Чтобы не допустить этого, вы должны использовать domains для создания логической группировки действий, на которые влияет исключение, и обрабатывать его соответствующим образом. Если вы используете веб-сервер с состоянием, необработанное исключение, вероятно, должно быть уловлено, а остальные соединения будут закрыты изящно, прежде чем завершать приложение.
(Если вы используете приложение без гражданства, возможно, просто проигнорировать исключение и попытаться продолжить, хотя это не обязательно целесообразно. Используйте его с осторожностью).
Безопасность: Это огромная тема. Вы должны обеспечить, по крайней мере:
- Ваше приложение работает как внекорневой пользователя с наименьшими привилегиями. Для портов < 1024 требуются права root. Обычно это проксируется из более высокого порта с nginx, докерером или аналогичным.
- Вы используете helmet и затвердели свое приложение в той степени, в какой можете.
Как я уже сказал, вы используете Apache перед NodeJS, это не обязательно, поскольку apache, вероятно, будет работать под нагрузкой с помощью своей модели Threading больше, чем nodeJS с его моделью цикла событий.
Спасибо за ответ. Фактически, что я пытаюсь достичь, у меня есть два узла серверов. Я получаю доступ к ним через apache. В apache я использовал ProxyPass и mod_proxy_balancer для маршрутизации на сервер узлов. Я установил failonstatus = 503 в балансе. Поскольку apache не поддерживает (используя 2.2) websocket, устанавливается соединение xhr-polling. Основная проблема заключается в том, что мы запускаем два узла серверов, на которых клиент пытается установить соединение с сервером узлов. На узловом сервере мы нашли цикл, «клиент, который не имеет клиентский ключ, должен снова подключиться». Любая идея, как преодолеть это? – user2344173
У меня нет большого опыта работы с apache в том виде, который вы описываете, возможно, что его неспособность прокси-запросов к серверу узлов веб-сервера, возможно обходное решение заключается в том, чтобы запускать отдельно сервер узла и сервер Apache, обслуживать клиентский статический клиент socket.io и попытаться подключиться к серверу узлов, что, в свою очередь, каким-то образом аутентифицирует его, возможно, попытается проверить cookie/сеанс из «общей» точки. Кроме того, если вы просто обслуживаете статические файлы с помощью apache, просто попробуйте безболезненно переключиться на статический файловый сервер nodejs, это сэкономит массу усилий. – Gntem