Параллелизм и быстрое время загрузки всегда были проблемой для любого сайта с высоким трафиком. Чтобы загружать сайты быстрее, браузеры открывают несколько подключений к веб-серверу для параллельной загрузки контента. В сочетании с постоянными соединениями веб-сервер должен быть действительно надежным и иметь возможность нелинейного масштабирования с количеством запросов.
Становится очень важным, чтобы веб-сайт основывался на нескольких слабосвязанных, но очень сплоченных строительных блоках, и nginx действительно является важной частью для достижения этой цели.
Nginx (произносится как x) — это легкий, бесплатный HTTP-сервер с открытым исходным кодом и обратный прокси-сервер, а также почтовый прокси-сервер.
Nginx может использоваться в качестве полной замены для других HTTP-серверов, таких как Apache, или может стоять перед существующей инфраструктурой, которую вы используете, для работы в качестве обратного прокси-сервера.
Обратный прокси-сервер
Использование обратного прокси-сервера очень важно, поскольку оно помогает в:
- скрытие существования и характеристик фактического исходного сервера
- распределение нагрузки
- сжатие и кэширование контента
- делать A / B тестирование
- манипулирование запросом / ответом
HTTP-сервер (против Apache)
Чем nginx отличается от Apache? Nginx основан на событиях и асинхронен, в то время как Apache полностью зависит от потоков. На веб-сервере с относительно высоким трафиком потоки неизбежно исчерпывают память. Событие, основанное на асинхронной и неблокирующей модели (nginx), является очевидным победителем в таком случае.
Архитектура и внутренности
Он имеет один главный процесс, и несколько «рабочих» процессов выполняются от имени непривилегированного пользователя. Внутри каждого работника nginx может обрабатывать несколько тысяч соединений.
worker
код nginx включает в себя ядро и функциональные модули. Модульная архитектура Nginx позволяет расширять возможности веб-сервера без изменения ядра. Модули читают и записывают в сеть и в хранилище, преобразуют контент, передают запросы на исходные серверы, включают действия на стороне сервера и другие вещи Модули в основном составляют прикладной уровень и функциональность представления.
Модули Nginx бывают разных форм: основные модули, модули событий, обработчики фаз, протоколы, обработчики переменных, фильтры, восходящие потоки и балансировщики нагрузки. В настоящее время nginx не поддерживает динамически загружаемые модули, поэтому модули должны компилироваться вместе с ядром во время сборки.
Nginx обрабатывает соединения как модули, соединенные друг с другом как цепь. Для каждой операции есть модуль, который выполняет соответствующую работу, например, сжатие, изменение контента, выполнение включений на стороне сервера и связь с вышестоящими серверами приложений. Типичный цикл обработки HTTP-запроса выглядит следующим образом:
- Клиент отправляет HTTP-запрос.
- Ядро Nginx выбирает соответствующий обработчик фазы на основе настроенного местоположения, соответствующего запросу.
- Если это настроено, балансировщик нагрузки выбирает вышестоящий сервер для прокси.
- Обработчик фазы выполняет свою работу и передает каждый выходной буфер первому фильтру.
- Первый фильтр передает выходные данные второму фильтру.
- Второй фильтр передает выход на третий (и так далее).
- Окончательный ответ отправляется клиенту.
Этот многослойный и слабо связанный, но очень сплоченный подход делает его действительно хорошим в том, что он делает.
Конфигурация Nginx
Конфигурация Nginx находится в текстовых файлах, обычно в /usr/local/etc/nginx
или /etc/nginx
. Основной файл конфигурации называется nginx.conf
. Файл конфигурации Nginx, по сути, представляет собой список директив, организованных в логической структуре. Все поведение приложения определяется значениями, которые вы передаете этим директивам.
nginx.conf
01
02
03
04
05
06
07
08
09
10
11
12
13
|
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
…
|
Выше вы видите небольшой фрагмент по умолчанию для nginx conf (с пояснениями). Весь файл также может быть расположен по адресу /usr/local/etc/nginx/nginx.conf.default
. Суть в том, чтобы подробно объяснить каждую директиву.
В этой статье рассказывается, что такое nginx и какую важную роль он играет в ускорении работы сайтов. Также были затронуты директивы в файле конфигурации. Во второй части статьи мы расскажем и дадим несколько рецептов использования nginx в различных контекстах, а также расскажем о модулях nginx, которые необходимо использовать.