В этой статье мы расскажем, что такое Nginx, как он работает, какие у него плюсы и минусы.
Nginx ― это программное обеспечение с открытым исходным кодом, которое позволяет создавать веб-сервер. Также его используют как почтовый сервер или обратный прокси-сервер.
Для начала разбёрем, что такое веб-сервер. Веб-сервер — это программное обеспечение, основная задача которого — обработка входящих и исходящих запросов на различных протоколах передачи данных. Рассмотрим этот процесс на примере веб-сайтов. После того как вы ввели URL-адрес сайта в адресной строке, браузер обращается к веб-серверу путём передачи запроса по протоколу HTTP. Веб-сервер выполняет некий набор инструкций, указанный в конфигах, и возвращает по HTTP ответ, например со статическими страницами сайта или данными для редиректа. Таким образом, веб-сервер ― это связующее звено между браузером и сервером. Зачем нужен Nginx?
Веб-сервер Nginx:
- снижает нагрузку на сервер при обработке запросов на файлы,
- снижает нагрузку на приложения за счёт кеширования,
- балансирует нагрузки, что повышает отказоустойчивость сервера,
- позволяет обрабатывать сотни тысяч единовременных подключений на одном физическом сервере,
- проводит аутентификацию пользователей.
Nginx работает почти на всех Linux и Unix подобных системах, а также на некоторых версиях Windows.
Как работает Nginx
Есть 2 алгоритма работы ― синхронный и асинхронный. При синхронном алгоритме для каждого этапа задачи выделяется отдельный поток и вся операция выполняется шаг за шагом, то есть программа не переходит к следующему шагу, пока не закончит предыдущий. Таким образом, некоторые элементы системы периодически простаивают, пока ждут, когда придёт их очередь. Отсюда два недостатка такой системы:
- нерациональное использование ресурсов,
- ограниченное количество операций.
По такому принципу работает, например, веб-сервер Apache.
Асинхронный алгоритм решил проблемы, перечисленные выше. При асинхронном алгоритме код по-прежнему выполняет всё шаг за шагом, но при этом системе необязательно ждать завершения одного этапа, чтобы перейти к следующему. Все задачи идут в одном потоке. Программа всегда в курсе всего процесса в целом и может переходить к следующему этапу, когда предыдущий еще не завершён. По асинхронному алгоритму работает Nginx. Благодаря такому подходу работа с Nginx позволяет:
- выполнять больше операций,
- работать быстрее,
- экономить память.
Несмотря на плюсы Nginx и его асинхронного алгоритма, есть один минус ― блокирующие операции. Бывает так, что среди параллельно выполняющихся маленьких операций есть одна, которая задерживает весь поток. Например, весь поток может ждать ответа от жёсткого диска для одного из этапов. Это похоже на очередь в кассе супермаркета. Какое-то время вся система идёт чётко. Один человек оплачивает, второй уже выкладывает товар на ленту, кассир пробивает товар, параллельно покупатель складывает пробитый товар в пакет. Вдруг на пакете с помидорами нет штрих-кода. Покупатель бежит взвешивать. Вся очередь стоит. Процесс остановлен.
Для решения этой проблемы в версии Nginx 1.7.11 был создан новый механизм ― пул потоков. Когда в процессе нужно выполнить потенциально долгую операцию, она помещается в отдельный поток, чтобы не задерживать все остальные. В нашем примере с кассой не покупатель бы побежал взвешивать помидоры, а работник супермаркета. Пока он взвешивал помидоры, кассир продолжал бы пробивать товары, а покупатель складывать их.
Подробнее о том, как произвести установку и начальное администрирование Nginx, можно узнать в статьях:
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊