Сайты в Интернете доступны посетителям благодаря незаметной работе веб-серверов, основная функция которых — обработка входящих запросов. Они распределяют их, затем формируют и отправляют ответные сообщения с запрошенными данными.
В нашей статье мы расскажем об одном из самых популярных на сегодня веб-сервере Nginx, дадим подробную инструкцию по установке и первичной настройке Nginx в качестве веб-сервера.
Немного об Nginx
Nginx (произносится как «engine x») — серверное ПО, обычно выполняющее функции HTTP-сервера, обратного или почтового прокси-сервера, TCP/UDP прокси-сервера общего назначения, но чаще всего его используют как веб-сервер. Более того, на 2024 год это самый популярный сервер: на нём работает 34 % всех сайтов в Интернете. По популярности он опередил даже прежнего лидера и «старичка» среди веб-серверов Apache, разработанного в далёком 1995 году. До появления Nginx в 2002-м на Apache работало 60 % веб-сайтов, сейчас же его распространённость упала до 30 %. На такое перераспределение охвата повлияло то, что разработчики более нового Nginx учитывали ошибки Apache и меняющиеся потребности пользователей.
Многие известные российские платформы работают на Nginx, в том числе Яндекс, Mail.Ru, ВКонтакте и Рамблер.
Nginx — хорошее решение для сайтов со статическим содержимым. Удобно и то, что обработкой запросов, входящих на один и тот же сайт, могут заниматься два веб-сервера одновременно: один будет передавать статические страницы и их части, а второй (например, Apache) — динамические.
Как установить Nginx
Для веб-сервера подойдёт локальный ПК или удалённый сервер с предустановленной ОС на базе Linux (сюда входят Ubuntu, Debian, CentOS), Unix (FreeBSD, облачные ОС), а также его можно поставить на macOS и некоторые версии Windows. Что касается Ubuntu (а также других дистрибутивов Linux), обычно установочный пакет есть в репозитории по умолчанию, и установить его можно прямо из него с помощью системы Advanced Package Tool (apt). Ещё один вариант установки — это сборка из исходных файлов. Такой подход хорош, если нужна поддержка специфических функций, которые будут недоступны при установке из стандартного пакета. Веб-сервер, скомпилированный из исходного кода — это наиболее гибкое решение, но оно доступно только продвинутым пользователям. Мы же рассмотрим процесс установки из репозитория Ubuntu.
- Непосредственно перед установкой обновим данные репозитория, для этого введём в терминале:
apt update
- Когда обновлённые данные о наличии пакетов загрузятся, можно приступить к установке:
apt install nginx
- Программа установлена, добавим её в список ПО, которое автоматически запускается сразу после запуска системы:
systemctl enable nginx
- Теперь нужно убедиться, что процессы завершились успешно, ПО установлено, заработало корректно и есть в списке автозапуска:
service nginx status
Если в выведенных данных вы видите строку, которая начинается с «Active: active (running)…», то это говорит об успешных установке и запуске.
Альтернативный способ выполнить проверку — перейти по IP-адресу сервера в браузере. Если в окне отобразится приветственная страница, то установка прошла правильно.
- Следующий шаг — убедимся, что включён автозапуск:
systemctl is-enabled nginx
Правильный вывод — «enabled».
Команды Nginx на Ubuntu
Синтаксис базовых команд:
sudo systemctl <command> nginx
Вместо <command> вставьте:
- start — для запуска,
- stop — для остановки,
- restart — чтобы перезапустить,
- reload — чтобы перезагрузить веб-сервер,
- status — проверить актуальный статус.
Кроме того используется запрос «nginx -t» для тестирования конфигурации.
Когда Nginx уже запущен, для управления можно обращаться к исполняемому файлу (для чего используют флаг «-s»). Общий синтаксис обращения:
nginx -s <command>
Вместо <command> можно указать одну из команд:
- stop — быстрое завершение всех процессов;
- quit — медленное завершение, при котором все текущие запросы будут обслужены;
- reload — перезагрузить файл конфигурации;
- reopen — закрыть и открыть файлы логов.
Важно, что эти команды должны выполняться от имени того же пользователя, который запустил веб-сервер.
На выделенных серверах можно перезапустить и перезагрузить программу через SSH.
- Перезапуск:
/etc/init.d/nginx stop
/etc/init.d/nginx start
- Перезагрузка:
/etc/init.d/nginx reload
Каждый раз, когда изменялся конфигурационный файл, нужно перезапускать или перезагружать службу для гарантированного применения новых настроек. Однако есть рекомендации перезагружать веб-сервер, а не перезапускать, хотя это и занимает больше времени. Перезагрузка безопаснее перезапуска: сначала проверяется синтаксис конфигурационного файла, и если будет обнаружена синтаксическая ошибка, то перезагрузка остановится, программа откатит внесённые изменения и будет работать со старыми настройками, что позволит серверу продолжать работу.
Настройка сетевого экрана
Сетевой экран управляет доступом к портам. В нашем случае нужно закрыть все порты, и оставить открытыми порты, которые обслуживают Secure Shell, Hypertext Transfer Protocol и Hypertext Transfer Protocol Secure. В примере мы покажем, как открыть стандартные порты 22, 80 и 443 (SSH, HTTP и HTTPS соответственно). Однако известно, что на эти порты приходится большинство хакерских атак, поэтому рекомендуется сначала изменить установленные по умолчанию порты сервера, а потом произвести перенастройку сетевого экрана.
- Настраивать сетевой экран будем с помощью UFW (Uncomplicated Firewall), инструмента командной строки, предназначенного для управления политикой безопасности файрвола. Обычно утилита установлена по умолчанию, в противном случае установим её (не забудьте перед этим обновить репозиторий):
apt install ufw
- Когда установка будет завершена, произведём настройку и добавим Nginx. Задавать правила нужно обязательно с выключенным файрволом, а включать его можно только по окончании настройки. Откроем /etc/ufw/applications.d/nginx.ini для редактирования:
nano /etc/ufw/applications.d/nginx.ini
- Пропишем в содержимом:
[Nginx HTTP]
title=Web Server
description=Enable NGINX HTTP traffic
ports=80/tcp
[Nginx HTTPS] \
title=Web Server (HTTPS) \
description=Enable NGINX HTTPS traffic
ports=443/tcp
[Nginx Full]
title=Web Server (HTTP,HTTPS)
description=Enable NGINX HTTP and HTTPS traffic
ports=80,443/tcp
4. Для проверки просмотрим текущий список приложений, добавленных в утилиту:
ufw app list
Если изменения применились, то в выведенном списке должен быть веб-сервер.
- Затем запустим сетевой экран и дадим разрешение использовать перечисленные выше порты:
ufw enable
ufw allow 'Nginx Full'
ufw allow 'OpenSSH'
- Убедимся, что изменённые настройки применены:
ufw status
В выводе будет информация о текущем состоянии и правилах UFW.
Базовая настройка
Параметры конфигурации должны быть правильно настроены. Nginx управляют директивы, прописанные в файле nginx.conf и в файлах папок /etc/nginx/sites-available и /etc/nginx/sites-enabled.
Файл nginx.conf содержит основные параметры. В sites-available лежат conf-файлы доступных виртуальных хостов, а sites-enabled содержит сведения об активных сайтах.
Обзор основного конфигурационного файла
Файл nginx.conf и расположен в папке /usr/local/nginx/conf, /etc/nginx или /usr/local/etc/nginx. Откроем nginx.conf (замените /directory/ на актуальный путь):
nano /directory/nginx.conf
Как мы уже писали выше, файл разбит на одиночные директивы и блоки. Внутри блоков может храниться более одной директивы с дополнительными инструкциями, объединённые в блок по какому-либо признаку.
Перечислим некоторые из них:
- user — пользователь, от чьего имени осуществляется запуск;
- worker_processes — параметр ограничивает количество процессов, выполняющих обработку запросов; фиксированный параметр не может превышать число ядер CPU; укажите «auto», чтобы установить его автоматически равным количеству ядер CPU;
- pid — задаёт путь к nginx.pid, где будет храниться номер главного процесса; главный процесс отвечает за чтение и проверку конфигурации и управляет рабочими процессами;
- include — подключает дополнительные conf-файлы;
- events — блочные директивы, описывающие характеристики сетевого соединения;
- worker_connections — параметр ограничивает количество одновременных соединений;
- multi_accept — мультидоступ; включён по значению «on», и отключён по «off»;
- use — способ, которым будут обработаны соединения;
- http — блочные директивы, ответственные за HTTP;
- tcp_nopush — если присвоено значение «on», то заголовки HTTP будут передаваться одним пакетом;
- tcp_nodelay — если «on», то отправляемые данные не будут буферизованы;
- keepalive_timeout — максимальное время ожидания, после которого соединение закрывается;
- keepalive_requests — ограничивает количество запросов по keep-alive соединению, когда достигнуто указанное количество — соединение закрывается;
- error_log — лог ошибок; чтобы собрать ошибки в конкретном блоке, добавьте в его директивы «error_log»;
- gzip — сжатие данных.
Как настроить виртуальные хосты
На веб-сервер можно добавлять множество сайтов, которые будут иметь общий IP-адрес. Чтобы Nginx мог распределить запросы в соответствии с доменами, к которым они относятся, нужны виртуальные хосты.
Рассмотрим работу Nginx на примере сайта с доменным именем test_adminvps.ru и статическим содержимым.
- Сначала создадим корневой каталог:
mkdir -p /var/www/test_adminvps.ru/html
- Создадим файл index.html и откроем его для редактирования:
nano /var/www/test_adminvps.ru/html/index.html
- Внесём в него данные, необходимые для отображения веб-страницы в браузере, укажем тип документа, язык, кодировку, заполним теги:
<!DOCTYPE html>
<html lang="ru">
<head>
<title>test_adminvps.ru</title>
<meta charset="utf-8">
</head>
<body>
<h1>Hello</h1>
</body>
</html>
- Добавим в папку sites-available conf-файл для сайта test_adminvps.ru:
nano /etc/nginx/sites-available/test_adminvps.ru.conf
- Запишем в него:
server {
listen 80;
listen [::]:80;
server_name test_adminvps.ru www.test_adminvps.ru;
root /var/www/test_adminvps.ru/html;
index index.html index.xml;
}
- После этих действий сайт добавлен в доступные. Осталось добавить его в список активных в папке sites-enabled:
ln -s /etc/nginx/sites-available/test_adminvps.ru.conf /etc/nginx/sites-enabled/
- Виртуальный хост создан, проверим его текущее состояние:
nginx -t
- Затем нужно деактивировать дефолтный виртуальный хост:
rm /etc/nginx/sites-enabled/default
Дефолтный хост отключён, теперь Nginx будет использовать первый виртуальный хост из конфигурации. А это означает, что по IP-адресу сервера откроется созданный нами test_adminvps.ru.
- Перезагружаем веб-сервер:
systemctl restart nginx
- Перейдём по его адресу — в окне браузера должна отобразиться индексная страница сайта.
Подведём итоги
Мы рассмотрели процесс установки Nginx на Ubuntu, а также привели пошаговую инструкцию для первичной настройки веб-сервера. В результате описанных здесь действий сервер уже готов к следующему шагу — подключению SSL-сертификата и настройке переадресации с HTTP на HTTPS.
Читайте в блоге: