Для чего нужно использовать прокси с pm2?

Я начал изучать pm2 и у меня возникли вопросы. В интернете я наблюдаю, что создают прокси в nginx на pm2. Какова причина такого подхода? Можно ли использовать только pm2 для деплоя без nginx?
  • 30 января 2025 г. 6:14
Ответы на вопрос 2
PM2 — это менеджер процессов для Node.js, который помогает управлять приложениями, их перезапуском, мониторингом и масштабированием. Однако PM2 не является веб-сервером: он предназначен для запуска и управления приложениями. Вот основные причины, почему при деплое приложений, запускаемых через PM2, часто используется прокси-сервер (например, Nginx):

1. **Обработка статического контента**: Nginx хорошо подходит для обслуживания статических файлов (например, изображений, стилевых файлов, скриптов), что может разгрузить серверное приложение, запущенное под управлением PM2.

2. **Балансировка нагрузки**: Если у вас несколько экземпляров приложения (например, запущенных через PM2 в режиме кластеризации), Nginx может использоваться как балансировщик нагрузки, распределяющий входящие запросы между этими экземплярами.

3. **SSL/TLS шифрование**: Nginx может обрабатывать HTTPS трафик. Это означает, что вам не нужно беспокоиться о настройке шифрования на уровне вашего Node.js приложения, что упрощает его конфигурацию.

4. **Управление загрузкой и кэширование**: Nginx может выполнять кэширование ответов и управлять количеством одновременно приходящих запросов, предотвращая перегрузку вашего приложения.

5. **Безопасность**: Использование Nginx позволяет настроить меры безопасности, такие как ограничение доступа к вашему приложению, защита от DDoS-атак и другие.

Можно ли использовать только PM2 для деплоя без Nginx? Да, можно запустить приложение только на PM2, и оно будет работать, но тогда вам придется позаботиться о многих упомянутых аспектах (так как PM2, в отличие от Nginx, не предназначен для обработки HTTP-запросов напрямую). В большинстве случаев использование прокси-сервера, такого как Nginx, является хорошей практикой, особенно в продакшене, так как это улучшает производительность и безопасность.
Всё довольно просто. NGINX - это веб-сервер, а PM2 - менеджер процессов Node.js. 
NGINX умеет работать с доменами, поддоменами, умеет делать маршрутизацию определённых роутов к определённым сервисам, в него легко добавить сертификаты SSL/TLS для HTTPS/HTTP2. PM2 ничего этого не умеет, потому что он не является веб-сервером, он буквально просто управляет процессами Node.js, всё остальное остаётся либо на разработчике, либо на frontend-сервере (напр. NGINX). Если не использовать NGINX или другой frontend-сервер, то вам придётся писать работу с доменами, как-то отдавать статику, например, клиентское приложение (HTML, CSS, JS, картинки и тд), подключить сертификаты к node.js приложению, думать, как поддерживать несколько портов (80/443). В конце концов это просто небезопасно, все процессы, которые прослушивают порты до 1000, должны иметь особые привилегии, если в вашем коде найдут дыру, то смогут исполнить любой код с этими самыми привилегиями, что может оказаться очень плачевно. А в схеме с nginx ваши процессы node.js могут быть запущены на более высоких портах (1000+) и запускаться от имени пользователя, у которого минимальные права, и если хакер и найдёт дыру в вашем приложении, полностью захватить сервер не сможет. За дырами в безопасности nginx следят очень многие люди и компании, поэтому их относительно быстро закрывают, а в вашем приложении следите за ними только вы.
Похожие вопросы