В соответствии с требованиями нашей платформы, каждый веб-сайт будет автоматически размещен вместе с конфигурациями DNS, что сделает сайт живым на зарезервированном домене, настроив Nginx для каждого домена и поддомена.
Нам нужны динамические конфигурации виртуальных хостов для Nginx, поэтому мы придумали три варианта, упомянутые ниже.
Требуется предложение, какой из них будет правильным, так как наша база веб-сайтов растет с 30 до 40 новых веб-сайтов в день, а на платформе уже зарегистрировано более 2000 веб-сайтов.
Также будет рассмотрен любой лучший вариант, кроме этих.
Массовые конфигурации виртуальных хостов
Этого можно добиться, сделав server_name
динамический с использованием регулярного выражения.
Плюсы:
- Один файл, отдельные виртуальные хосты.
- Нет необходимости перезагружать Nginx при каждой регистрации нового домена.
- Может включать любое количество доменов.
Минусы:
- Может привести к DDoS-атаке, если кто-то узнает, что сервер обрабатывает любой поступающий к нему запрос домена.
- Может замедлить ответ, так как для каждого запроса будет выполняться запрос к базе данных, чтобы проверить, существует ли домен / поддомен с платформой.
Пути решения проблемы:
- Кэширование, такое как Memcache или Redis, можно использовать для кеширования всех доменов и поддоменов, поэтому будет несколько запросов к базе данных для проверки существования домена и поддомена (только в случае сбоя кеша)
- Использование Cloudflare, которое может помочь нам в предотвращении DDoS-атак.
- Nginx также можно настроить так, чтобы блокировать запросы для определенных IP-адресов, которые отправляют запросы слишком часто.
- Определенные IP-адреса и боты, ответственные за любые виды атак, также могут быть заблокированы с помощью плохих конфигураций блокировщика ботов.
Конфигурации файлов отдельных виртуальных хостов
Скрипт, который при получении запроса на новый домен создаст виртуальные хосты в отдельном файле, сделает его доступным для Nginx, включит его и перезагрузит Nginx.
Плюсы:
- Отдельные виртуальные хосты для каждого нового зарегистрированного домена.
- Позволяет обрабатывать только зарегистрированные домены.
Минусы:
- Необходимо запускать скрипт для каждого нового зарегистрированного домена, который будет запускаться как пользователь sudo / пользователь root
- Может привести к более чем 1000 файлов, которые необходимо загрузить и обработать Nginx.
- Для каждого нового виртуального хоста необходимо перезагружать Nginx.
- Обработка запросов и управление ими могут стать проблемой, если зарегистрировано слишком много доменов.
Способы решения проблемы:
- Вместо нескольких файлов используйте один файл для всех виртуальных хостов.
Однофайловые конфигурации с несколькими хостами
Скрипт, который при получении запроса на новый домен добавит новые виртуальные хосты в единственный файл, используемый Nginx, и перезагрузит Nginx.
Плюсы:
- Отдельные виртуальные хосты для каждого нового зарегистрированного домена.
- Позволяет обрабатывать только зарегистрированные домены.
- Уменьшает количество файлов для всех виртуальных хостов до одного.
Минусы:
- Файл может стать тяжелым из-за слишком большого количества записей виртуальных хостов.
- Может замедлить обработку Nginx из-за большого количества виртуальных хостов, с которых нужно искать.
- Для каждого нового виртуального хоста необходимо перезагружать Nginx.
Способы решения проблемы:
- Нет другого решения, кроме массовых виртуальных хостов.
Мы наконец остановились на
Конфигурации файлов отдельных виртуальных хостов
Причина в том, что большинство веб-сайтов, зарегистрированных на нашей платформе, обслуживаются через субдомен, и очень немногие будут иметь собственный домен. Таким образом, в этом случае один файл с подстановочной записью будет служить цели для большинства веб-сайтов. А для нескольких веб-сайтов с собственным доменом у нас может быть отдельный файл хоста, и это можно автоматизировать.
Это также помогает в обслуживании запросов https для каждого поддомена и домена. Мы также можем автоматизировать некоторые вещи на сервере nginx, используя сценарии Lua для управления этими файлами хостов.
Если у кого-то есть лучший вариант, пожалуйста, ответьте своими комментариями, это нам очень поможет.