WEB-HYBRID

Nginx

Обзор 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;
  • Настроить файрвол и ограничить доступ.