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

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

Поддомены на nginx: несколько сайтов на одном VPS
Блог MAATRIX · 2026-07-07

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

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Как 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
nginx -v

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

Кладём файлы сайта и создаём конфиг /etc/nginx/sites-available/blog.site.ru:

sudo mkdir -p /var/www/blog/html
sudo chown -R www-data:www-data /var/www/blog
server {
    listen 80;
    server_name blog.site.ru;
    root /var/www/blog/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    access_log /var/log/nginx/blog.access.log;
    error_log  /var/log/nginx/blog.error.log;
}

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

Второй поддомен — приложение на локальном порту (например, Node или Gunicorn на 127.0.0.1:8000). Конфиг /etc/nginx/sites-available/app.site.ru:

server {
    listen 80;
    server_name app.site.ru;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }
}

Заголовки X-Forwarded-* передают приложению реальный IP клиента и протокол — без них приложение будет видеть все запросы как локальные.

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

Активируем оба конфига симлинками, проверяем синтаксис и перезагружаем nginx:

sudo ln -s /etc/nginx/sites-available/blog.site.ru /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/app.site.ru  /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

nginx -t обязательна перед reload: она ловит опечатки в конфиге, чтобы перезагрузка не уронила все сайты сразу.

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

Let's Encrypt выдаёт бесплатные сертификаты, а плагин certbot для nginx сам правит конфиги под HTTPS:

sudo apt install -y certbot python3-certbot-nginx
sudo 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 под несколько сайтов

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

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

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

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

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

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

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

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