Несколько сайтов на одном сервере: сколько потянет и как развести
Один сервер под один сайт - расточительно: младший тариф справляется с несколькими проектами, а платить за каждый отдельно незачем. Вопрос в том, где проходит граница: два сайта уживаются почти всегда, десять - уже как повезёт, а неудачное соседство приводит к тому, что падение одного проекта роняет остальные.
Разберём, от чего зависит количество, как технически развести сайты по доменам, зачем их изолировать друг от друга и в какой момент пора разносить по разным машинам.
Сколько сайтов выдержит сервер
Считать надо не сайты, а нагрузку. Десять визиток нагружают сервер меньше, чем один магазин.
| Что за проекты | Младший тариф (1-2 ГБ) | 4 ГБ | 8 ГБ |
|---|---|---|---|
| Визитки и лендинги | 5-10 | 15-20 | больше 20 |
| Небольшие сайты на CMS | 2-3 | 4-6 | 8-10 |
| Магазины | не стоит | 1 | 2-3 |
| Магазин плюс тестовые копии | нет | 1 плюс стенд | 2 плюс стенды |
Цифры ориентировочные, потому что решают три вещи:
Память. Каждый сайт на CMS держит свои процессы, и они занимают память независимо от того, есть ли посетители. Это основной ограничитель.
Пики, а не среднее. Сервер должен переживать момент, когда на всех сайтах одновременно кто-то есть. Считать по средней нагрузке - верный способ ошибиться.
Кеш меняет картину. Сайты с кешированием страниц отдают их почти без затрат, и на том же сервере их помещается в разы больше, см. как ускорить сайт на VPS.
Как считать ресурсы под конкретную задачу, разобрано в статье как выбрать конфигурацию сервера.
Как они разводятся технически
Все сайты живут на одном IP-адресе, и это нормально: отдельный адрес под каждый сайт не нужен.
Работает это так: браузер сообщает серверу, какой домен он запрашивает, и веб-сервер по этому имени выбирает нужный каталог. В настройках это отдельный блок на каждый сайт со своим именем и своим корневым каталогом, см. Nginx на VPS.
Сертификаты тоже не требуют отдельных адресов: на одном IP спокойно живёт сколько угодно HTTPS-сайтов, каждый со своим сертификатом, см. SSL-сертификат на VPS.
Со стороны домена всё просто: A-записи всех доменов указывают на один и тот же адрес сервера, см. как привязать домен к VPS.
Изоляция: зачем и насколько
Технически сайты можно свалить в один каталог под одним пользователем, и они будут работать. Проблемы начинаются потом.
Отдельный пользователь на сайт. Если один сайт взломают через уязвимость в плагине, злоумышленник получит доступ только к его файлам, а не ко всем проектам сразу. Это самая дешёвая мера с самым большим эффектом, см. что делать, если сервер взломали.
Отдельные базы и пользователи баз. Каждый сайт ходит в свою базу под своей учётной записью с правами только на неё, см. база данных на своём сервере.
Отдельные пулы процессов. Позволяет ограничить, сколько памяти достаётся каждому сайту. Без этого один проект под нагрузкой съедает всё и роняет соседей.
Контейнеры - максимальная изоляция. Каждый сайт в своём окружении со своими версиями. Удобно, когда проектам нужны разные версии языка, см. Docker на VPS.
Минимум, который стоит сделать всегда: разные пользователи и разные базы. Это десять минут при настройке и спасённый вечер в будущем.
Когда пора разносить по серверам
Совместное размещение перестаёт быть выгодным в четырёх случаях.
Проекты мешают друг другу. Всплеск на одном сайте тормозит остальные. Первый признак - жалобы на разные сайты одновременно.
Разные требования к доступности. Боевой магазин и экспериментальный проект на одной машине означают, что обновление ради второго рискует первым.
Разные владельцы. Клиентские проекты на общем сервере создают неприятные ситуации при передаче доступов и при уходе клиента.
Разные требования к размещению данных. Если одному проекту нужна российская площадка, а другому европейская, вопрос решается не настройками, см. VPS в России.
Промежуточный шаг перед разделением - просто добавить ресурсов: на виртуальном сервере это минуты и часто снимает проблему дешевле, чем вторая машина.
Что усложняется при нескольких сайтах
- Бэкапы. Копии нужны по каждому проекту отдельно, иначе восстановление одного сайта затрагивает все, см. резервное копирование VPS.
- Обновления. Общая версия языка означает, что обновить её ради одного проекта нельзя, не проверив остальные, см. обновление сервера.
- Логи. Каждому сайту стоит писать в свои файлы, иначе разбор превращается в мучение, см. логи на сервере.
- Мониторинг. Следить надо не только за сервером целиком, но и за тем, какой проект съедает ресурсы, см. мониторинг VPS.
Частые ошибки
Считают сайты, а не нагрузку. Десять визиток и один магазин - разные задачи, хотя в обоих случаях это сайты.
Держат всё под одним пользователем. Взлом одного проекта открывает доступ ко всем.
Одна база на все сайты. Та же проблема, плюс невозможность восстановить один проект отдельно.
Не ограничивают ресурсы на проект. Один сайт под нагрузкой забирает всю память и роняет соседей.
Ставят боевой проект рядом с экспериментальным. Любая проверка гипотезы становится риском для рабочего сайта.
Берут отдельный IP на каждый сайт. Не нужно: имена разводятся веб-сервером, а сертификаты работают на одном адресе.
Частые вопросы
Сколько сайтов можно держать на одном VPS? Зависит от нагрузки, а не от количества. На младшем тарифе помещается 5-10 визиток или 2-3 небольших сайта на CMS, магазину лучше выделить сервер.
Нужен ли отдельный IP-адрес каждому сайту? Нет. Веб-сервер разводит сайты по именам доменов, а HTTPS работает на одном адресе для любого числа сайтов.
Как разделить сайты между собой? Минимум - отдельный пользователь и отдельная база на каждый проект. Дальше идут ограничения ресурсов на пул процессов и контейнеры.
Что будет, если один сайт взломают? При общем пользователе пострадают все проекты. При раздельных доступ ограничен файлами одного сайта.
Когда пора разносить проекты по разным серверам? Когда они мешают друг другу под нагрузкой, когда у них разные требования к доступности или к размещению данных, либо когда у проектов разные владельцы.
Можно ли держать тестовую копию рядом с боевым сайтом? Технически да, но любое обновление ради теста становится риском для боевого проекта. Лучше отдельный сервер или хотя бы контейнер.
Усложняются ли бэкапы? Да, копии нужно делать по каждому проекту отдельно, чтобы восстановление одного сайта не задевало остальные.
Проектов стало больше одного? VPS на NVMe от 459 руб в месяц - ресурсы наращиваются за минуты, когда сайтов станет тесно, полный root-доступ для своей изоляции. Площадки в Москве, Казани и Амстердаме.