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.