Server block — это аналог virtual host из Apache: блок конфигурации, который описывает один сайт. На одном сервере с одним IP-адресом может работать десятки server block, и Nginx выбирает нужный по заголовку Host из запроса. После установки Nginx, описанной в статье про установку Nginx на Ubuntu и Debian, следующий шаг — создать первый server block для своего домена.
Что такое server block и зачем он нужен
Без server block Nginx отдаёт всем запросам один и тот же дефолтный конфиг из /etc/nginx/sites-enabled/default. Как только на сервере появляется второй сайт, нужен отдельный блок server с собственным корнем документов, логами и правилами обработки.
Каждый server block описывает: на каком порту слушать (listen), для каких доменов он предназначен (server_name), где лежат файлы сайта (root) и как обрабатывать разные типы запросов (директивы location, подробно разобранные в статье про приоритет location в Nginx).
Структура sites-available и sites-enabled
На Ubuntu и Debian конфигурации сайтов принято хранить в двух каталогах:
- /etc/nginx/sites-available/ — здесь лежат файлы конфигурации всех сайтов, включённых и выключенных.
- /etc/nginx/sites-enabled/ — здесь лежат символические ссылки на активные конфигурации из sites-available.
Такое разделение позволяет быстро отключить сайт, просто удалив symlink, не трогая сам файл конфигурации. Создание нового сайта выглядит так:
sudo nano /etc/nginx/sites-available/example.com
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Минимальный server block для одного сайта
Базовая конфигурация для статического сайта на домене example.com выглядит так:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public;
index index.html index.php;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
Директива listen задаёт порт и, при необходимости, IP-адрес: listen 192.0.2.10:80 привяжет сервер только к одному адресу. Директива server_name перечисляет домены через пробел — Nginx сравнивает их с заголовком Host входящего запроса.
Несколько сайтов на одном сервере
Чтобы разместить второй сайт, создайте отдельный файл в sites-available с другим server_name и своим root. Nginx выбирает подходящий server block по точному совпадению server_name, а если совпадения нет — использует блок с флагом default_server.
| Директива | Назначение |
|---|---|
| listen 80 default_server | Обрабатывает запросы без совпадения по server_name |
| server_name example.com | Точное совпадение домена |
| server_name *.example.com | Совпадение по маске поддоменов |
| server_name example.com www.example.com | Несколько доменов на один сайт |
Частые ошибки при настройке server block
Забытый default_server на одном из блоков listen 80 — самая частая причина, почему Nginx открывает не тот сайт по IP-адресу без домена. Только один server block в пределах порта может иметь флаг default_server, иначе nginx -t выдаст ошибку duplicate default server.
Вторая частая ошибка — забыть создать symlink в sites-enabled после правки sites-available: конфигурация лежит на диске, но Nginx её не использует, пока не выполнен nginx -t и reload. Для HTTPS-сайтов дополнительно понадобится SSL-сертификат — этот процесс описан в статье про настройку SSL/TLS в Nginx.
Проверка и применение конфигурации
После любого изменения файлов в sites-available обязательны две команды:
- sudo nginx -t — проверяет синтаксис всех подключённых конфигураций разом.
- sudo systemctl reload nginx — применяет изменения без разрыва активных соединений.
Если nginx -t вернул ошибку, systemctl reload ничего не изменит — Nginx продолжит работать со старой конфигурацией до исправления ошибки. Это защищает production-сайт от падения из-за опечатки в конфиге.
Server block — базовый строительный блок конфигурации Nginx: один файл на один сайт, чёткое разделение sites-available и sites-enabled, обязательная проверка nginx -t перед reload. На этом фундаменте строятся более сложные сценарии — location-правила, reverse proxy и SSL.