Ответ 1
- Часть любого веб-приложения полностью стандартизирована и удобна для использования. Зрелые веб-серверы, такие как nginx или apache, могут выполнять следующие действия. Они могут делать следующие вещи таким образом, что это, скорее всего, более корректно, более эффективно, стабильнее, безопаснее, более знакомо для системных администраторов и более легко настраивается, чем все, что вы могли бы переписать на своем сервере приложений.
- Подавать статические файлы, такие как HTML, изображения, CSS, javascript, шрифты и т.д.
- Управление виртуальным хостингом (несколько доменов на одном IP-адресе)
- Переписывание URL-адресов
- переписывание/перенаправление имен хостов
- Окончание TLS (спасибо @emt14)
- сжатие (спасибо @JacobusR)
- Отдельный веб-сервер предоставляет возможность обслуживать страницу "вниз для обслуживания", когда ваш сервер приложений перезапускается или сбой
- Обратные прокси-серверы могут обеспечить балансировку нагрузки и отказоустойчивость для вашей инфраструктуры приложений.
- Веб-серверы имеют встроенные и протестированные механизмы для привязки к привилегированным портам (ниже 1024) как root, а затем выполняются как незащищенные пользователи. Большинство рамок для веб-приложений не делают этого по умолчанию.
- Зрелые веб-серверы жесткие и стабильные. Под конюшней я имею в виду, что они буквально почти никогда не падают. Ваше веб-приложение почти наверняка намного менее стабильно. Это дает вам возможность, по крайней мере, обслуживать страницу с хорошей ошибкой пользователю, говорящему, что ваше приложение отключено, а не веб-браузер, просто отображая общую ошибку "не удалось подключиться".
- Анекдотический случай: nginx обрабатывает атаку, которая в противном случае DoS node.js: http://blog.nodejs.org/2013/10/22/cve-2013-4450-http-server-pipeline-flood-dos/
И на всякий случай, если вам понадобится полуофициальный ответ Айзека Шлютера на техническом обсуждении Airbnb 30 января 2013 года около 40 минут, в нем рассматривается вопрос о является ли node стабильным и безопасным, чтобы обслуживать соединения непосредственно в Интернете. Его ответ по существу "да", это прекрасно. Таким образом, вы можете это сделать, и вы, вероятно, будете в порядке с точки зрения стабильности и безопасности (при условии, что вы используете кластер для обработки неожиданного завершения процесса сервера приложений), но, как указано выше, реальность текущих операций заключается в том, что все еще почти все работают node за отдельным веб-сервером или обратным прокси-кешем.