К основному содержимому

Server block в Nginx: виртуальный хостинг нескольких сайтов

Nginx · 29.09.2026

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 обязательны две команды:

  1. sudo nginx -t — проверяет синтаксис всех подключённых конфигураций разом.
  2. sudo systemctl reload nginx — применяет изменения без разрыва активных соединений.

Если nginx -t вернул ошибку, systemctl reload ничего не изменит — Nginx продолжит работать со старой конфигурацией до исправления ошибки. Это защищает production-сайт от падения из-за опечатки в конфиге.

Server block — базовый строительный блок конфигурации Nginx: один файл на один сайт, чёткое разделение sites-available и sites-enabled, обязательная проверка nginx -t перед reload. На этом фундаменте строятся более сложные сценарии — location-правила, reverse proxy и SSL.

← Назад в базу знаний Задать вопрос поддержке