Nginx
Nginx — это веб-сервер и обратный прокси-сервер с открытым исходным кодом.
Что даёт
Nginx изначально проектировался под проблему C10K (обработка 10 000 одновременных соединений). В отличие от классического Apache, создающего отдельный процесс под каждый запрос, Nginx использует асинхронный событийный цикл (event loop). Один рабочий процесс (worker) обрабатывает тысячи соединений параллельно с мизерным расходом RAM.
Из-за этого Nginx редко ставят в одиночку для сложной динамики — его чаще используют как фронтенд-сервер (reverse proxy). Он принимает весь трафик из интернета, сам отдаёт картинки, CSS и JS, а тяжёлые PHP- или Python-запросы пересылает на бэкенд (Apache, Node.js, Gunicorn, PHP-FPM).
Плюсы в архитектуре:
- Быстрая статика. Файлы с диска отдаются напрямую через системный вызов sendfile, вообще не загружая интерпретаторы языков.
- Балансировка и отказоустойчивость. Умеет распределять запросы по пулу бэкендов (round-robin, least_conn, ip_hash) и на лету выводить из строя упавшие ноды.
- Терминация TLS/SSL. Забирает на себя тяжёлую математику по расшифровке HTTPS-трафика, отдавая бэкенду внутри приватной сети чистый HTTP.
- Защита бэкенда. Задерживает медленные или корявые запросы (Slowloris), сжимает ответы (gzip, brotli) и лимитирует частоту обращений через limit_req.
Как использовать
В инфраструктуре Nginx закрывает сразу несколько базовых задач.
- Обратный прокси и отдаче статики. В конфиге прописывают проксирование динамики через proxy_pass http://backend_upstream;, а статические файлы отдают напрямую из каталога location /static/ { root /var/www/app; }.
- Балансировка нагрузки. Через блок upstream задаётся группа серверов приложений. Nginx распределяет входящие запросы между ними и проверяет их доступность.
- Кеширование ответов. Через proxy_cache сервер кеширует ответы от бэкенда на диске. Повторные запросы от пользователей даже не доходят до базы данных или приложения.