img

Nginx: как работает самый быстрый веб-сервер

Если ты когда-нибудь создавал сайт или работал с серверами, то наверняка слышал про Nginx. Это один из самых популярных веб-серверов в мире. А ещё его сделали в России :) Он быстрый, надежный и широко используется как для небольших сайтов, так и для крупных проектов вроде Netflix, GitHub, Яндекс, Авито, Хабр и запрещенной социальной сети с картинками. Давай разберемся подробнее, что это за инструмент, когда и зачем он был создан.

icon strelka icons icons

узнай больше на курсе

Онлайн-курс по Linux
Курс по Linux от Мерион Нетворкс - стань Linux администратором, прокачай свой скиллсет умением работать с операционными системами линукс и сделай большой шаг к DevOps
Подробнее о курсе
Полный курс по сетевым технологиям
Полный курс по сетевым технологиям от Мерион Нетворкс - учим с нуля сетевых инженеров и DevOPS специалистов
Подробнее о курсе
DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
Подробнее о курсе


Как появился Nginx

Nginx (читается как Engine X) разработал российский инженер Игорь Сысоев. В начале 2000-х годов он работал над серверной частью крупного сайта и столкнулся с серьёзной проблемой: существующие веб-серверы плохо справлялись с большим количеством одновременных подключений.

На тот момент самым популярным сервером был Apache, но он работал синхронно — обрабатывал каждый запрос отдельным процессом или потоком. Это быстро приводило к перегрузке сервера при высокой посещаемости.

Чтобы решить эту проблему, Игорь Сысоев начал разработку нового веб-сервера. В 2004 году он выпустил первую версию Nginx — веб-сервера с асинхронной архитектурой, который способен быстро обрабатывать тысячи подключений одновременно.

Сравниваем Nginx и Apache

Главное отличие Nginx от Apache — асинхронная обработка запросов. Вместо того чтобы запускать отдельный процесс на каждый запрос, Nginx использует событийно-ориентированную модель. 

Как работал Apache (и в чём его проблема)

Apache использовал старый, но простой принцип: каждый запрос — отдельный процесс или поток. Это значит, что когда на сервер приходит, например, 1000 запросов, Apache создаёт 1000 процессов или потоков. Это требует много оперативной памяти и процессорного времени.

Но есть нюанс: запросы не всегда требуют работы процессора. Например, браузер запросил картинку, а сервер ждёт, пока жёсткий диск её найдёт. Или сервер отправил запрос в базу данных и ждёт ответ. Всё это время процесс или поток «простаивает», а память занята. Теперь представьте, что таких запросов миллионы. Сервер просто в них утонет.

Как работает асинхронная обработка в Nginx

Вместо того чтобы выделять отдельный процесс на каждый запрос, Nginx использует одно или несколько рабочих процессов, которые работают по асинхронному принципу. Как это устроено:

1. Запрос попадает в очередь задач. Выглядит как длинный список дел.

2. Специальный цикл событий (event loop) пробегается по списку и проверяет, что можно сделать.

3. Если запрос готов к обработке — сервер его выполняет. Например, если файл уже загружен или база данных ответила, Nginx отправляет результат пользователю.

4. Если запрос требует ожидания (например, ждёт ответа базы данных), он пропускается. Цикл переходит к следующему запросу. Когда придёт нужный ответ, запрос снова попадает в очередь.

5. Цикл повторяется бесконечно, быстро перебирая все запросы.

Чтобы ещё больше ускорить работу, Nginx запускает несколько таких циклов. Они работают параллельно и синхронизируют друг с другом задачи.

Для чего нужен Nginx

Nginx — это не просто веб-сервер. Он выполняет сразу несколько важных задач: может выступать как обратный прокси, балансировщик нагрузки, кэш-сервер и почтовый прокси. Рассмотрим подробнее:

1. Работа с сайтами с большим количеством статического контента. Если на сайте есть много изображений, видео, стилей CSS и скриптов JavaScript, Nginx оперативно справляется с их раздачей. Он быстрее загружает такие файлы, чем другие веб-серверы, потому что работает асинхронно и эффективно использует ресурсы.

2. Обслуживание сайтов с высокой нагрузкой. Когда на сервер поступает много запросов одновременно, обычные веб-серверы могут не справиться. Nginx разработан так, чтобы обрабатывать тысячи запросов в секунду без перегрузки системы.

3. Балансировка нагрузки. Это значит, что если у проекта несколько серверов, Nginx будет равномерно распределять запросы между ними, чтобы не перегружать один из них. Возьмем для примера онлайн-кинотеатр, где пользователи смотрят видео. Один сервер не справляется, поэтому Nginx направляет часть пользователей на другой сервер.

4. SSL/TLS терминация. Nginx поддерживает SSL/TLS-терминацию, то есть он обрабатывает самостоятельно HTTPS-запросы, разгружая бэкенд. Также он может защищать от DDoS-атак, фильтровать вредоносные запросы (например, SQL-инъекции) и ограничивать число запросов с одного IP.

5. Почтовый сервер. Nginx можно использовать для работы с почтой: он поддерживает протоколы IMAP, POP3 и SMTP, может принимать, отправлять и фильтровать письма.

Преимущества Nginx среди других веб-серверов

ПреимуществоОписаниеЧто это дает?
Высокая скоростьАсинхронная обработка запросов, многопоточностьМгновенная загрузка страниц, меньше задержек при высокой нагрузке
Низкое потребление памятиНе создает отдельный процесс на каждый запросЭкономит ресурсы сервера, подходит для VPS и слабых машин
ГибкостьМожет работать как веб-сервер, прокси, балансировщик нагрузки, почтовый серверПодходит для разных задач, легко настраивается
Балансировка нагрузкиРаспределяет запросы между несколькими серверамиСайт не падает даже при большом трафике
КэшированиеСохраняет копии страниц и статических файловУскоряет загрузку сайта, снижает нагрузку на сервер
МасштабируемостьЛегко добавлять новые серверы и распределять нагрузкуПроект растёт без сложных изменений в инфраструктуре
КроссплатформенностьМожно установить на разные операционные системыРаботает на Linux, Unix (BSD), Windows, macOS и других ОС

Вместо итогов

Итак, если нужен быстрый, стабильный и экономичный сервер, который легко настраивается и справляется с высокой нагрузкой, то Nginx — отличный выбор. Именно поэтому его используют миллионы сайтов по всему миру. 

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

Онлайн-курс по Linux
Курс по Linux от Мерион Нетворкс - стань Linux администратором, прокачай свой скиллсет умением работать с операционными системами линукс и сделай большой шаг к DevOps
Подробнее о курсе
Полный курс по сетевым технологиям
Полный курс по сетевым технологиям от Мерион Нетворкс - учим с нуля сетевых инженеров и DevOPS специалистов
Подробнее о курсе
DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
Подробнее о курсе
Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Подробнее о курсе
Онлайн-курс по кибербезопасности
Полный курс по кибербезопасности от Мерион Нетворкс - учим с нуля специалистов по информационной безопасности. Пора стать безопасником!
Подробнее о курсе
Онлайн-курс по сетевой безопасности
Изучи основы сетевой безопасности и прокачай скилл системного администратора и сетевого инженера
Подробнее о курсе
Еще по теме:
img
Узнайте про 5 полезных Linux - команд: tldr, timeout, ncdu, fd и trash, которые упрощают жизнь при работе в CLI
img
Что позволяет называть один API как REST API, а другой нет? Сейчас попробуем разложить все по полочкам, чтобы ты на собесе жидко не споткнулся о такую, казалось бы, простую тему.
img
Узнайте, как работают сетевые порты в Linux, какие бывают типы портов, и как управлять ими с помощью команд netstat, ss, ufw и iptables
img
В этом руководстве вы узнаете, как установить и настроить Fail2ban на своем сервере.
img
В этой статье обсудим гипервизоры — важные компоненты процесса виртуализации серверов, как они работают и какие бывают типы.
ЛЕТНИЕ СКИДКИ
30%
40%
50%
До конца акции: 30 дней 24 : 59 : 59