MAATRIX / Блог / Несколько сайтов на одном VPS

Несколько сайтов на одном VPS

Блог MAATRIX · 2026-07-07

Один VPS легко держит десяток сайтов — платить за отдельный сервер под каждый проект не нужно. Секрет в виртуальных хостах nginx: сервер по имени домена решает, какой сайт отдать. Разберём, как настроить это чисто и безопасно.

Как один сервер обслуживает много доменов

['Все домены указывают A-записью на один IP. Приходит запрос — nginx смотрит заголовок Host и по нему выбирает нужный server-блок. Каждому сайту — свой каталог, свой конфиг, свой SSL.', 'Сколько сайтов потянет VPS? Десяток лёгких визиток и лендингов спокойно живут на тарифе от $8/мес. На NVMe у MAATRIX отдача статики и работа баз идут быстро даже при нескольких проектах на одном ядре.', 'Экономика очевидна: вместо трёх-пяти отдельных хостингов вы платите за один сервер, а управляете всем из одной SSH-сессии. Обновление PHP, настройка фаервола, мониторинг — всё в одном месте. Минус тоже есть: сайты делят ресурсы, поэтому один тяжёлый проект способен притормозить соседей. Именно поэтому ниже мы разграничиваем не только конфиги, но и пулы процессов, и лимиты по памяти.']

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

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

Арендовать VPS для нескольких сайтов

Структура каталогов

['Держите сайты раздельно — это упрощает бэкапы и разграничение прав:', '
/var/www/\n├── shop.ru/\n├── blog.ru/\n└── portfolio.ru/
', '
mkdir -p /var/www/{shop.ru,blog.ru,portfolio.ru}\nchown -R www-data:www-data /var/www
']

Server-блок под каждый сайт

['На каждый домен — отдельный файл в /etc/nginx/sites-available/. Пример для первого сайта:', '
server {\n    listen 80;\n    server_name shop.ru www.shop.ru;\n    root /var/www/shop.ru;\n    index index.php index.html;\n\n    location / { try_files $uri $uri/ /index.php?$args; }\n    location ~ \\.php$ {\n        include snippets/fastcgi-php.conf;\n        fastcgi_pass unix:/run/php/php8.2-fpm-shop.sock;\n    }\n    access_log /var/log/nginx/shop.access.log;\n}
', 'Активируем и перезагружаем nginx:', '
ln -s /etc/nginx/sites-available/shop.ru /etc/nginx/sites-enabled/\nnginx -t && systemctl reload nginx
', 'Обратите внимание на директиву fastcgi_pass: у каждого сайта она указывает на свой сокет php-fpm (php8.2-fpm-shop.sock). Именно это связывает домен с изолированным пулом процессов, который мы заведём ниже. Команда nginx -t перед каждым reload — обязательная привычка: она ловит опечатки в конфиге до применения, чтобы кривая правка на одном сайте не уронила все остальные разом.']

Отдельный пул PHP-FPM на сайт

['Чтобы падение одного сайта не тянуло за собой остальные, дайте каждому свой пул PHP-FPM. Создайте /etc/php/8.2/fpm/pool.d/shop.conf:', '
[shop]\nuser = www-data\ngroup = www-data\nlisten = /run/php/php8.2-fpm-shop.sock\npm = dynamic\npm.max_children = 8\npm.start_servers = 2\npm.min_spare_servers = 1\npm.max_spare_servers = 4
', '
systemctl restart php8.2-fpm
', 'Так проблемный сайт исчерпает только свой лимит процессов, а соседи продолжат работать.']

Свой SSL на каждый домен

['Certbot умеет выпускать сертификаты сразу на несколько доменов одной командой:', '
certbot --nginx -d shop.ru -d www.shop.ru \\\n        -d blog.ru -d www.blog.ru \\\n        -d portfolio.ru -d www.portfolio.ru
', 'Каждый сайт получит валидный HTTPS, автопродление настроится автоматически. Если добавляете новый домен позже — просто дозапускаете certbot с флагом -d newdomain.ru, старые сертификаты при этом не трогаются.', 'Важный нюанс: по умолчанию nginx отдаёт первый по алфавиту server-блок как «дефолтный», если запрос пришёл с неизвестным Host. Чтобы чужие боты не цеплялись к случайному сайту, заведите заглушку с default_server, возвращающую 444:', '
server {\n    listen 80 default_server;\n    server_name _;\n    return 444;\n}
']

Ресурсы и разграничение

['
  • Следите за памятью: pm.max_children у всех пулов в сумме не должен превышать RAM. Один PHP-воркер ест 30–60 МБ.
  • Разные базы — разным пользователям MySQL, чтобы утечка на одном сайте не открыла доступ к остальным.
  • Смотрите нагрузку по каждому сайту через отдельные access_log.
', 'Когда одному проекту станет тесно, его легко вынести на второй VPS — конфиг уже изолирован.', 'Для наглядности держите единую схему именования: каталог /var/www/домен, конфиг nginx с таким же именем, пул php-fpm и лог с тем же префиксом. Через полгода, когда сайтов станет много, вы мгновенно найдёте всё, что относится к конкретному проекту, а не будете распутывать безымянные site1, site2, test_final.']

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

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

Арендовать VPS для нескольких сайтов

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

Сколько сайтов выдержит один VPS?

Зависит от нагрузки: десяток визиток и блогов — легко на тарифе от $8/мес, а два-три нагруженных магазина лучше держать на более мощной конфигурации или разнести по серверам.

Зачем каждому сайту свой пул PHP-FPM?

Для изоляции: если один сайт исчерпает лимит процессов или зависнет, остальные продолжат работать, потому что используют собственные воркеры.

Можно ли смешивать сайты на PHP и, например, Node.js?

Да. nginx проксирует PHP на php-fpm, а Node-приложение — на его порт через proxy_pass. Домены при этом делят один сервер.