Мультисайтовость в Nginx: настройка 5 сайтов на одном VPS (Server Blocks)
Как экономить на серверах: несколько сайтов на одном VPS
Нет необходимости покупать отдельный сервер под каждый небольшой проект. Веб-сервер Nginx умеет маршрутизировать запросы на основе заголовка Host: пользователь вводит site1.com — открывается первый сайт, вводит site2.ru — открывается второй.
Архитектура структуры папок Nginx
/etc/nginx/
├── sites-available/ (Каталог шаблонов всех сайтов)
└── sites-enabled/ (Каталог активных сайтов через симлинки) Создание и включение нового виртуального хоста
- Создаем отдельную папку для нового сайта:
sudo mkdir -p /var/www/site1.com/html sudo chown -R $USER:$USER /var/www/site1.com/html - Создаем тестовую HTML-страничку:
echo "<h1>Site 1 is working!</h1>" > /var/www/site1.com/html/index.html - Создаем конфигурационный файл виртуального хоста:
sudo nano /etc/nginx/sites-available/site1.com.conf - Вставляем минимальный рабочий конфиг:
server { listen 80; server_name site1.com www.site1.com; root /var/www/site1.com/html; index index.html index.php; location / { try_files $uri $uri/ =404; } } - Активируем сайт созданием символической ссылки (symlink):
sudo ln -s /etc/nginx/sites-available/site1.com.conf /etc/nginx/sites-enabled/ - Проверяем синтаксис и перезагружаем Nginx:
sudo nginx -t && sudo systemctl reload nginx
Повторите эти шаги для site2.com, site3.com и так далее, меняя пути к папкам и доменные имена.
Частые вопросы (FAQ)
Что делать, если при проверке nginx -t выводится duplicate default server?
Параметр default_server может быть указан только в одном блоке конфигурации на всем сервере.
Как временно отключить один сайт?
Удалите символическую ссылку: sudo rm /etc/nginx/sites-enabled/site1.com.conf и выполните reload nginx.
Где прописать обработку PHP для этих сайтов?
Добавьте блок location ~ \.php$ с проксированием в fastcgi_pass unix:/run/php/php-fpm.sock.
Почему открывается не тот сайт при переходе по IP?
Nginx отдает первый по алфавиту сайт из sites-enabled, если домен явно не опознан.