Налаштування Nginx Virtual Host: приклади конфігурації

Віртуальний хост у Nginx — це блок server, який описує, як обробляти запити до конкретного домену. На одному VPS може працювати скільки завгодно сайтів, кожен зі своїм блоком. Нижче — три готові шаблони та порядок їх підключення в Ubuntu й Debian.
Де лежать конфігурації
/etc/nginx/sites-available/— файли всіх сайтів;/etc/nginx/sites-enabled/— символічні посилання на ввімкнені сайти;/etc/nginx/nginx.conf— загальні налаштування сервера.
У прикладах замініть example.com на свій домен. Його A-запис має вказувати на IP-адресу сервера.
Статичний сайт
Створіть каталог сайту та файл конфігурації:
sudo mkdir -p /var/www/example.com
sudo nano /etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
Сайт на PHP
Для WordPress та інших PHP-застосунків запити до .php передаються в PHP-FPM:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Ім’я сокета залежить від версії PHP: в Ubuntu 24.04 це php8.3-fpm.sock, у Debian 12 — php8.2-fpm.sock. Точне ім’я покаже команда ls /run/php/. Повне розгортання стека описано в статті про встановлення LEMP.
Зворотний проксі
Так публікують застосунки, які слухають локальний порт: Node.js, Python, контейнери Docker.
server {
listen 80;
listen [::]:80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Останні два рядки потрібні застосункам, що використовують WebSocket.
Увімкнення сайту
Створіть посилання, перевірте синтаксис і перечитайте конфігурацію:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Команда nginx -t обов’язкова: у разі помилки в конфігурації reload не застосує зміни, а restart зупинить усі сайти на сервері.
Безкоштовний SSL-сертифікат
Certbot отримає сертифікат Let’s Encrypt і сам допише в конфігурацію блок для HTTPS і перенаправлення з HTTP:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Сертифікат продовжується автоматично. Перевірити продовження можна командою sudo certbot renew --dry-run.
Перенаправлення з www
Щоб сайт відкривався за однією адресою, додайте окремий блок:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
і приберіть www.example.com із server_name основного блоку.
Часті помилки
- Відкривається сторінка «Welcome to nginx». Запит потрапив у типовий сайт: перевірте
server_nameі наявність посилання вsites-enabled. - 502 Bad Gateway. Застосунок або PHP-FPM не запущено, або вказано неправильний порт чи сокет.
- 403 Forbidden. Користувач
www-dataне має прав на каталог сайту або відсутній індексний файл. - Зміни не застосовуються. Виконайте
sudo nginx -t— найімовірніше, у конфігурації помилка.
Якщо не хочеться редагувати файли вручну, Nginx Proxy Manager робить те саме через вебінтерфейс.


