Обзор Nginx
В 2002 году Игорь Сысоев начал работу над Nginx для того чтобы решить проблему C10K – требование к ПО работать с 10 тысячами одновременных соединений. Первый публичный релиз был выпущен в 2004 году, поставленная цель была достигнута благодаря асинхронной event-driven архитектуре.
Nginx начал набирать популярность с момента релиза благодаря своей легковесности (light-weight resource utilization) и возможности легко масштабироваться на минимальном железе. Nginx превосходен при отдаче статического контента и спроектирован так, чтобы передавать динамические запросы другому ПО предназначенному для их обработки.
Администраторы часто выбирают Nginx из-за его эффективного потребления ресурсов и отзывчивости под нагрузкой, а также из-за возможности использовать его и как веб-сервер, и как прокси.
Интересный факт
Nginx используется такими гигантами как Netflix, WordPress.com, Cloudflare и многими другими крупными компаниями для обработки миллионов запросов в день.
Особенности Nginx
- Асинхронная событийно-ориентированная архитектура – неблокирующая обработка запросов;
- Высокая производительность при большом количестве одновременных соединений – оптимизирован для работы с 10,000+ соединениями;
- Эффективная работа со статическим контентом – быстрая отдача HTML, CSS, JavaScript файлов;
- Балансировка нагрузки – распределение трафика между несколькими серверами;
- Кэширование и сжатие – ускорение загрузки контента;
- Обратный прокси – промежуточный сервер между клиентами и бэкенд-серверами;
- Поддержка HTTP/2 и WebSocket – современные протоколы связи.
Архитектура Nginx
Nginx появился на сцене позднее Apache, по этой причине, его разработчик был лучше осведомлен о проблемах конкурентности, с которыми сталкиваются сайты при масштабировании. Благодаря этим знаниям Nginx изначально был спроектирован на базе асинхронных неблокирующих event-driven алгоритмов.
Каждое соединение, обрабатываемое воркером, помещается в event loop вместе с другими соединениями. В этом цикле события обрабатываются асинхронно, позволяя обрабатывать задачи в неблокирующей манере. Когда соединение закрывается оно удаляется из цикла.
Этот подход к обработке соединений позволяет Nginx'у невероятно масштабироваться при ограниченных ресурсах. Поскольку сервер однопоточный и он не создает процессы под каждое соединение, использование памяти и CPU относительно равномерно, даже при высоких нагрузках.
Ключевые компоненты архитектуры
Master Process
Главный процесс, который управляет worker процессами, читает конфигурацию и связывается с портами.
Worker Processes
Дочерние процессы, которые обрабатывают входящие соединения асинхронно и неблокирующе.
Преимущества Nginx
- Высочайшая производительность при высоких нагрузках;
- Низкое потребление памяти и CPU;
- Отличная работа со статическим контентом;
- Мощные возможности балансировки нагрузки;
- Простая и понятная конфигурация;
- Поддержка современных протоколов (HTTP/2, WebSocket).
Недостатки Nginx
- Ограниченная поддержка .htaccess файлов;
- Меньшее количество модулей по сравнению с Apache;
- Динамические модули требуют перекомпиляции;
- Менее удобен для shared хостинга.
Основные области использования Nginx
Обратный прокси
Распределение нагрузки между бэкенд-серверами.
Статический контент
Быстрая отдача изображений, CSS, JS файлов.
Load Balancer
Балансировка трафика между серверами.
Быстрый старт
Установка Nginx на Ubuntu:
sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
Безопасность Nginx
Рекомендации по безопасности:
- Скрыть версию Nginx в заголовках;
- Настроить ограничения для запросов;
- Использовать SSL/TLS с современными шифрами;
- Регулярно обновлять Nginx;
- Настроить файрвол и ограничить доступ.