MAATRIX / Блог / Несколько сайтов и поддоменов на одном VPS через nginx

Несколько сайтов и поддоменов на одном VPS через nginx

Блог MAATRIX · 2026-07-07

Один VPS легко тянет десяток сайтов: nginx разводит запросы по доменам через виртуальные хосты. Настроим два поддомена — статический сайт и проксируемое приложение — с отдельными конфигами и бесплатным HTTPS через Let's Encrypt. Никакой второй сервер не нужен.

Как nginx разводит домены

['nginx смотрит на заголовок Host в запросе и по директиве server_name выбирает нужный блок server. Так один IP и один процесс обслуживают сколько угодно доменов и поддоменов — это называется виртуальный хостинг по имени.', 'На одном VPS MAATRIX с AMD EPYC и NVMe спокойно живут блог, лендинг и пара клиентских проектов одновременно — ресурсов ядра хватает с запасом, а быстрый диск ускоряет отдачу статики.', 'Предполагаем, что DNS-записи A для site.ru, blog.site.ru и app.site.ru уже указывают на IP вашего сервера.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS под несколько сайтов

Структура конфигов

['Хорошая практика — по файлу на сайт в /etc/nginx/sites-available/, а включённые ссылками в /etc/nginx/sites-enabled/. Проверяем, что nginx стоит:', '
sudo apt update && sudo apt install -y nginx\nnginx -v
']

Сайт 1. Статический на поддомене

['Кладём файлы сайта и создаём конфиг /etc/nginx/sites-available/blog.site.ru:', '
sudo mkdir -p /var/www/blog/html\nsudo chown -R www-data:www-data /var/www/blog
', '
server {\n    listen 80;\n    server_name blog.site.ru;\n    root /var/www/blog/html;\n    index index.html;\n\n    location / {\n        try_files $uri $uri/ =404;\n    }\n\n    access_log /var/log/nginx/blog.access.log;\n    error_log  /var/log/nginx/blog.error.log;\n}
']

Сайт 2. Проксирование приложения

['Второй поддомен — приложение на локальном порту (например, Node или Gunicorn на 127.0.0.1:8000). Конфиг /etc/nginx/sites-available/app.site.ru:', '
server {\n    listen 80;\n    server_name app.site.ru;\n\n    location / {\n        proxy_pass http://127.0.0.1:8000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}
', 'Заголовки X-Forwarded-* передают приложению реальный IP клиента и протокол — без них приложение будет видеть все запросы как локальные.']

Включаем и проверяем

['Активируем оба конфига симлинками, проверяем синтаксис и перезагружаем nginx:', '
sudo ln -s /etc/nginx/sites-available/blog.site.ru /etc/nginx/sites-enabled/\nsudo ln -s /etc/nginx/sites-available/app.site.ru  /etc/nginx/sites-enabled/\nsudo nginx -t\nsudo systemctl reload nginx
', 'nginx -t обязательна перед reload: она ловит опечатки в конфиге, чтобы перезагрузка не уронила все сайты сразу.']

Бесплатный HTTPS через certbot

["Let's Encrypt выдаёт бесплатные сертификаты, а плагин certbot для nginx сам правит конфиги под HTTPS:", '
sudo apt install -y certbot python3-certbot-nginx\nsudo certbot --nginx -d blog.site.ru -d app.site.ru
', 'certbot добавит блоки listen 443 ssl, редирект с 80 на 443 и настроит автопродление через systemd-таймер. Проверить продление:', '
sudo certbot renew --dry-run
']

Частые ошибки

['
  • Открывается не тот сайт — нет подходящего server_name, и запрос попадает в дефолтный блок. Проверьте, что домен совпадает точно.
  • 502 Bad Gateway на проксируемом сайте — приложение не запущено или слушает другой порт/адрес.
  • certbot не может выдать сертификат — DNS ещё не указывает на сервер или 80-й порт закрыт файрволом.
  • Забыли nginx -t и словили reload с ошибкой — упали все сайты; всегда тестируйте конфиг перед перезагрузкой.
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS под несколько сайтов

Частые вопросы

Сколько сайтов потянет один VPS?

Для статики и небольших приложений — десятки. Упрётесь не в nginx, а в память и CPU конкретных приложений; на AMD EPYC у MAATRIX запас большой.

Нужен ли отдельный IP на каждый поддомен?

Нет. Виртуальный хостинг по имени обслуживает все домены на одном IP — nginx различает их по заголовку Host.

Как получить HTTPS сразу на все поддомены?

Перечислите их флагами -d в одной команде certbot либо используйте wildcard-сертификат через DNS-валидацию для *.site.ru.