Nginx — быстрый, дерзкий и суперпопулярный сервер

Nginx — быстрый, дерзкий и суперпопулярный сервер

Сделан в России

Мы постепенно рассказываем о веб-серверах — это программы, которые отвечают за то, чтобы нам выдавались сайты. В прошлой серии показывали Apache — один из первых массовых веб-серверов, который до сих пор работает в огромном количестве компьютеров. А сегодня — новое поколение.

Короткая предыстория

Главная проблема веб-сервера Apache, про который мы говорили прошлый раз, — это падение производительности с ростом трафика. Чем больше людей заходят на сайт, тем хуже он справляется. Решения на тот момент были такие:

  • устанавливать в серверы более мощное оборудование;
  • добавлять новые серверы.

И то и другое  — дорого. Чтобы решить эту проблему, в 2002 году системный администратор Игорь Сысоев начал разрабатывать собственный веб-сервер, который сможет решить проблему с проседанием под нагрузкой. Тогда Игорь работал в «Рамблере». 

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

Архитектура

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

В Nginx всё устроено немного иначе: 

  1. Каждый запрос попадает в список задач.
  2. Специальный цикл по очереди быстро просматривает каждую задачу и смотрит, надо по ней что-то делать или ещё ждём.
  3. Если надо делать — делает и отправляет ответ. Или даёт задание другим, чтобы тоже что-то сделали.
  4. Сразу после этого цикл перебегает к другой задаче, и всё повторятся.
  5. Так круг за кругом цикл перебирает все задачи, которые падают на сервер, и жонглирует ими, управляя по очереди.
  6. Чтобы было ещё быстрее, Nginx может запустить одновременно несколько таких циклов, синхронизируя их работу друг с другом.

Получается, что так как Nginx не тратит время на ожидание результата, то он может одновременно обрабатывать гораздо больше запросов, чем Apache. В этом и есть суперсила Nginx.

В чём ещё отличия от Apache

Документация. У Apache документации, форумов и примеров гораздо больше, потому что проект начался на 7 лет раньше и все материалы сразу были на английском — стандартном языке для всех программистов.

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

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

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

Конфигурация и настройка. Apache управляется через служебные файлы, в которые он постоянно заглядывает, например .htaccess. Это снова гибкость и возможность очень тонкой настройки поведения для каждой папки и запроса. Но Apache каждый раз тратит время на такие чтения и проверки, а когда запросов много, то это становится критично. Ещё нужно просмотреть все папки, к которым идёт запрос, а это тоже время.

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

Nginx + Apache = ❤️

Может показаться, что Nginx и Apache воюют друг с другом за долю рынка, но на самом деле они отлично работают вместе:

  1. Ставим Nginx и Apache на один сервер.
  2. Настраиваем Apache на обработку запросов на динамические страницы. Самый частый пример такого запроса — отдать страницу на PHP-движке Водрпресса.
  3. Настраиваем Nginx, чтобы он обрабатывал все простые запросы и отдавал уже готовые статические страницы, которые запрашивают чаще всего.
  4. Также говорим, чтобы Nginx обрабатывал всю остальную статику: отдавал, если нужно, отдельно файлы, картинки, музыку и прочее, что имеет постоянный адрес и содержимое.
  5. А всё остальное, что нужно собирать динамически, — перенаправляем на Apache.

Получается так: Nginx занимается самыми простыми запросами, которые можно выполнить моментально, а всю динамику и сборки отправляет в Apache и продолжает заниматься своими делами. 

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

Кто использует

Если вы назовёте три любых крупных ИТ-компании, то две из них точно будут использовать Nginx. В этом можно легко убедиться самому, посмотрев на список тех проектов, где используют эту программу:

  • Яндекс
  • Вконтакте
  • Хабр
  • ЖЖ
  • Авито
  • Хедхантер
  • Фейсбук
  • Инстаграм
  • Вордпресс
  • Пинтерест
  • Нетфликс

Причина такой популярности — в скорости работы, надёжности и универсальности Nginx. К нему можно прикрутить почти любой софт и получить любую конфигурацию ответов на запросы.

Конфликт с «Рамблером»

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

Через полгода уголовное дело прекратили за отсутствием состава преступления: компания не смогла найти подтверждения своим словам и не смогла получить права на код Nginx. 

По иронии судьбы на Nginx сейчас работают серверы и самого Рамблера 🙂

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Олег Вешкурцев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства и компенсация, если вы пойдёте работать в «Яндекс».
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
За что не любят программистов

Вредные привычки и издержки профессии, которые мешают окружающим восхищаться работой программиста.

Программисты из SpaceX отвечают на вопросы про разработку
Программисты из SpaceX отвечают на вопросы про разработку

Переводим для вас популярный тред из Reddit.

Сжатие без потерь: как это работает
Сжатие без потерь: как это работает

Когда копия не отличается от оригинала.

Словарь тестировщика: автотесты, юнит-тесты и другие важные слова
Словарь тестировщика: автотесты, юнит-тесты и другие важные слова

Основные подходы и понятия инженеров по тестированию

Как начать программировать на Python

Если знаете JavaScript, освоиться в Питоне можно за 15 минут.

Зачем нужны счётчики аналитики на сайте и что они умеют
Зачем нужны счётчики аналитики на сайте и что они умеют

Переходим на новый уровень настройки сайтов.

Как пройти собеседование в ИТ-компанию
Как пройти собеседование в ИТ-компанию

Советы джунам, которые боятся отказа.

Кто такой сеньор и что он делает (он же senior)

Программист, который умеет всё.

iTerm2: модный терминал маковода
iTerm2: модный терминал маковода

Как установить и начать пользоваться.

Торренты: как они устроены

Сага о тех, кто качает по кусочкам.

medium