# Server block у Nginx: віртуальні хости для декількох сайтів

> Як налаштувати server block у Nginx: структура sites-available, sites-enabled, listen, server_name і декілька сайтів на одній IP.

Server block — це аналог virtual host з Apache: блок конфігурації, який описує один сайт. На одному сервері з однією IP-адресою можуть працювати десятки server block, і Nginx обирає потрібний за заголовком Host із запиту. Після встановлення Nginx, описаного у статті про [встановлення Nginx на Ubuntu і Debian](https://www.zevshost.net/uk/kb/nginx-ustanovka-ubuntu-debian/), наступний крок — створити перший server block для свого домену.

## Що таке server block і навіщо він потрібен

Без server block Nginx віддає всім запитам один і той самий дефолтний конфіг з /etc/nginx/sites-enabled/default. Щойно на сервері з'являється другий сайт, потрібен окремий блок server з власним коренем документів, логами і правилами обробки.

Кожен server block описує: на якому порту слухати (listen), для яких доменів він призначений (server\_name), де лежать файли сайту (root) і як обробляти різні типи запитів (директиви location, детально розібрані у статті про [пріоритет location у Nginx](https://www.zevshost.net/uk/kb/nginx-location-prioritet/)).

## Структура 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](https://www.zevshost.net/uk/kb/nginx-ssl-tls-nastroika/).

## Перевірка і застосування конфігурації

Після будь-якої зміни файлів у 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.

---

Джерело: https://www.zevshost.net/uk/kb/nginx-server-block-virtualnye-hosty/
