Сервер Nginx: как он работает и как его настроить
Знакомимся с устройством самого популярного в России сервера, сравниваем его с Apache и разбираемся в конфигурациях.
Иллюстрация: Cookie Studio / Freepik / Nginx / Colowgee для Skillbox Media
Сайты в интернете работают на веб-серверах, которые обрабатывают запросы пользователей и отвечают на них. Сегодня один из самых популярных веб-серверов — Nginx, в этом году он отмечает 20-летний юбилей. В этой статье, совместно с Дмитрием Зайцевым, инженером и CTO Flocktory, расскажем о нём.
Содержание
- Что такое Nginx
- Как он работает
- Что выбрать: Nginx или Apache
- Как подготовить и установить веб-сервер
- Как правильно его настроить
- Какая у Nginx иерархия каталогов
- Как работать с его конфигурацией
Эксперт
Дмитрий Зайцев
CTO Flocktory, программный директор профессии «DevOps-инженер» в Skillbox, директор программного комитета DevOpsConf.
Что такое Nginx
Nginx (Engine X, или «Энджин-икс») — это программное обеспечение с открытым исходным кодом для создания веб-серверов. Оно принимает запрос клиента, например браузера, обрабатывает его и возвращает ответ.
Сейчас на Nginx размещено 34% всех сайтов в интернете, что делает его самым популярным веб-сервером в мире.
Веб-сервер | Количество размещённых сайтов на 1 января 2024 года, в процентах |
---|---|
Nginx | 34,1 |
Apache | 30,4 |
Cloudflare | 21,6 |
LiteSpeed | 13,0 |
Microsoft IIS | 5,1 |
Nginx был разработан Игорем Сысоевым в 2002 году в качестве альтернативы серверу Apache, который тогда занимал более 60% рынка. В 2004 году продукт был опубликован для свободного использования, а в 2011-м Игорь с партнёрами организовали свою фирму.
Читайте также:
Один из её продуктов — Nginx Plus, платная версия ПО. Она отличается от опенсорсной возможностью мониторить активность сервера, продвинутыми правилами балансировки нагрузки, наличием поддержки и другими техническими нюансами.
Как работает Nginx
Nginx работает как обычный сервер — он получает запросы от клиента, например браузера, и отправляет ему запрашиваемые файлы. Это может быть HTML- и CSS-код, текст, изображения, видео и JS-скрипты, необходимые для отрисовки страницы.
Но есть особенности. Nginx работает асинхронно с событийно-ориентированной моделью обработки запросов. Благодаря этому он может поддерживать множество соединений без блокирования ввода и вывода. Разберёмся, что это значит.
Например, когда клиент отправляет запрос на передачу ему большого видеофайла, Nginx запускает операцию передачи, а затем освобождает поток обработки запросов, чтобы он мог получить и обработать другие запросы. Когда операция передачи завершается, Nginx обрабатывает результаты и продолжает выполнение других задач.
Таким образом, вместо того чтобы блокировать поток обработки запросов в ожидании завершения операции ввода и вывода, Nginx продолжает обрабатывать другие запросы. Это позволяет серверу эффективно обслуживать большое количество одновременных запросов на передачу видеофайлов, минимизируя задержки и использование ресурсов.
Nginx может быть не только классическим веб-сервером. Его используют и для:
- Создания прокси-серверов. Если количество запросов большое, то сам Nginx может не справляться с их обработкой. В этом случае он выступает в роли прокси: принимает запрос от клиента, передаёт его отдельному серверу для обработки, получает ответ и возвращает клиенту.
- SSL/TLS-терминации. Nginx поддерживает оба протокола, обеспечивая шифрование и дешифрование данных. Поэтому его можно использовать в качестве посредника между клиентом и основным веб-сервером, снижая нагрузку на последний.
Nginx или Apache
Перед созданием сайта стоит определиться с вариантом веб-сервера. Чаще всего разработчики выбирают между Nginx и Apache.
Коротко
Nginx — лидер по скорости обработки статического контента, который одинаков для всех пользователей. Например, карточки товаров в онлайн-магазине, лендинги, новостные сайты и так далее.
Apache больше подходит для динамического контента. Это всё, что генерируется во время запроса клиента и может изменяться от запроса к запросу.
Интересно, что сайт может работать на двух разных веб-серверах одновременно. В этом случае Nginx будет принимать все запросы и самостоятельно обрабатывать статический контент, а динамический — переправлять Apache.
Подробно
Nginx и Apache различаются принципом работы, возможностью конфигурирования, наличием модулей и другими характеристиками. Рассмотрим некоторые из них.
Характеристика | Apache | Nginx |
---|---|---|
Принцип работы | На каждый запрос клиента создаётся отдельный процесс. Но возможна работа и с одним мастер-процессом | Один мастер-процесс, создающий дочерние процессы для обработки запросов клиента |
Возможность конфигурирования | Обработка запросов настраивается на уровне каталогов при помощи файла .htaccess. В нём можно определить порядок аутентификации, авторизации, права доступа отдельных пользователей и другое | Тонкой настройки на уровне каталогов нет. Можно задать конфигурацию для мастер-процесса, контролирующего работу всего веб-сервера |
Работа с модулями | Дополнительные модули могут быть подключены при работающем сервере | Дополнительные модули должны быть выбраны и скомпилированы с ядром сервера. «Горячее» подключение невозможно |
Поддержка операционных систем | Работает на всех Unix-подобных ОС и Windows | Поддерживает большинство Unix-подобных ОС. На Windows имеются ограничения функциональности |
Простота настройки | Требуется настройка на нескольких уровнях операционной системы, в том числе отдельных файлов .htaccess | Простая настройка на этапе сборки или одного конфигурационного файла |
Подготовка и установка Nginx
Веб-сервер Nginx можно установить на разные операционные системы: Linux (дистрибутивы Ubuntu, Debian, CentOS и другие), Unix-подобные (например, FreeBSD или облачные) или macOS.
Важно!
Если вы решите разместить сервер локально, например на компьютере с Windows, то сделать это можно только с ограничениями, установив бета-версию. Подробно почитать об этом можно в официальной документации.
Мы же в этом разделе рассмотрим установку Nginx на Ubuntu, размещённой на хостинге. Это один из основных сценариев использования веб-сервера.
Установить дистрибутив Nginx можно несколькими способами: с официального сайта, скачав необходимый пакет для Linux, или из репозитория Ubuntu, где он присутствует по умолчанию. Выберем второй вариант, как самый удобный.
Перед установкой Nginx вам потребуется выбрать и оплатить хостинг. После этого войдите в его панель управления под стандартной учётной записью, имеющей привилегию на запуск команды sudo.
Используя систему управления пакетами apt, обновите установочные дистрибутивы из репозитория:
Теперь установите сам Nginx:
После завершения установки добавьте сервер в список на автозагрузку:
Всё готово к его настройке.
Настройка сервера Nginx
В Linux-системах популярной и простой утилитой для настройки политик безопасности является UFW (Uncomplicated Firewall). По умолчанию в ней стоит запрет на все входящие соединения. Поэтому откроем нужные нам порты:
- 22 — для удалённого доступа по SSH;
- 80 — для связи между клиентом и сервером по протоколу HTTP;
- 443 — для связи между клиентом и сервером по протоколу HTTPS.
Установите UFW и предоставьте ей доступ к веб-серверу:
Проверьте список доступных для UFW приложений:
Среди них должен быть Nginx:
Внесите разрешения на открываемые порты:
Чтобы проверить их статус, введите:
Ответ должен выглядеть так:
Проверьте работоспособность сервера:
Если он запущен и активен, то вернётся ответ Active: active (running) since….
Чтобы проверить доступность по HTTP, то есть статус портов для входящих запросов, откройте в браузере страницу сервера.
Если всё настроено как надо, вы увидите сообщение:
Остаётся проверить наличие сервера в списке на автозагрузку:
В ответ должно вернуться enabled.
Для управления Nginx используются базовые команды. Основные из них:
- sudo systemctl start nginx — запуск веб-сервера;
- sudo systemctl restart nginx — перезапуск;
- sudo systemctl reload nginx — перезагрузка;
- sudo systemctl stop nginx — отключение;
- sudo systemctl status nginx — проверка состояния сервера;
- sudo nginx -t — тестирование конфигурации.
Иерархия каталогов Nginx
Для анализа работы сервера и ручного внесения изменений в файлы стоит знать расположение и иерархию наиболее важных папок:
- /var/www/html — начальная страница;
- /etc/nginx — директория с основными файлами настроек;
- etc/nginx/nginx.conf — главный конфигурационный файл Nginx;
- /etc/nginx/sites-available — каталог с конфигурациями для каждого из сайтов, содержащий информацию о них: имя, IP и другое;
- /etc/nginx/sites-enabled — в отличие от предыдущей директории, здесь содержатся конфигурации только активных сайтов, которые обслуживаются Nginx;
- /etc/nginx/snippets — сниппеты для подключения к основной конфигурации сервера;
- /var/log/nginx — директория с логами событий.
Конфигурация Nginx
Работа самого Nginx и его модулей определяется директивами, указанными в конфигурационном файле. От их корректности зависит функциональность сервера.
Директивы прописываются автоматически при установке и настройке Nginx, но при необходимости можно их редактировать или даже импортировать сторонний файл.
Есть два уровня конфигурации: глобальный и локальный. Первый отвечает за работу всего сервера, а локальный — отдельных сайтов.
Синтаксис параметров конфигурации такой: Имя_директивы [Значение1] [Значение2] [Значение3…];
В качестве разделителя выступает знак табуляции или пробел. Завершается параметр обязательно точкой с запятой.
Посмотрим на то, как выглядит простая директива:
Пример с двойным значением:
Также параметры могут быть блочными, состоящими из нескольких строк. Отдельные блоки в них разделяются фигурными скобками:
Кроме того, несколько блочных директив можно объединить в одно целое. Например так:
Для просмотра конфигурационного файла введите команду:
Обычно он имеет многострочную структуру. Например:
Разберём построчно, что указано в конфигурации:
- user — имя пользователя.
- worker_processes — количество рабочих процессов. Значение auto устанавливает его равным количеству процессорных ядер.
- error_log — путь к логам ошибок веб-сервера.
- pid — файл с номером главного процесса.
- events — блок, состоящий из параметров, влияющих на работу сетевого соединения. Здесь указано worker_connections 1024 — максимальное число одновременно работающих соединений одного рабочего процесса.
- http — контекст, состоящий из директив, отвечающих за работу HTTP.
- include указывает на подключение иных файлов конфигурации.
- default_type задаёт MIME-тип ответов сервера по умолчанию.
- server — в этом блоке задаются конфигурации виртуального сервера.
- listen обозначает порт, который прослушивается, в нашем примере это порт 80 (HTTP), использующийся для веб-запросов.
- access_log — путь к файлу, в котором сохраняется история обращений к веб-серверу.
- index — главная страница сайта.
- root — корневой путь для запросов к серверу.
- index— имя файла, который будет определяться как индексный.
Существуют и другие параметры, которые могут быть указаны в конфигурации. Их можно посмотреть здесь.
Что запомнить
Резюмируем, что мы сегодня узнали:
- Nginx — это веб-сервер, принимающий запросы от клиента и обрабатывающий их. Кроме этого, его можно использовать для создания прокси-серверов и SSL/TLS-терминации.
- Nginx работает асинхронно с событийно-ориентированной моделью обработки запросов. Благодаря этому он может поддерживать множество соединений без блокирования ввода и вывода.
- Работа сервера определяется директивами в конфигурационном файле. Кроме глобального уровня управления в Nginx можно настроить локальную конфигурацию для каждого отдельного сайта.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!