@Fly3110
web developer

Какой вариант конфигурации для nginx логичнее и предпочтительнее?

Всем привет.

Как раньше говорили, "странного хочется".

Для домашних нужд сделал конфигурацию, когда на мой ip смотрят несколько доменов. Причем домашние каталоги для этих доменов я могу переназначать динамически (настройки в базе). То есть, в какой-то момент у всех доменов один домашний каталог, потом я прописываю одному домену другой каталог. Потом еще одному прописываю свой каталог. Потом добавляю новый домен с еще одним домашним каталогом. Встал вопрос, как разруливать роутинг, так как использовать бакенд для роутинга я не хочу. Слишком просто )))

Пока у меня есть 2 решения, оба уже написаны и протестированы.

1. Через map файл для nginx. То есть, при любом чихе в сторону настроек доменов, (добавление нового, изменение рабочего каталога и так далее) для nginx генерится новый map файл с соответствием host - root_dir и новый файл со списком хостов, которые обрабатывать этим конфигом. Также создается семафор, на который реагирует ежеминутный скрипт в кроне, который перезагружает nginx.

2. Через lua скрипт в конфиге nginx, который лезет в редис, если там нет записи для домена, то лезет в postgres, берет оттуда соответствующую запись, складывает ее в редис с таймаутом, скажем, 5 минут и прописывает верный root для nginx

Работает и так и так, но я задумался, а какое из этих больше имеет право на жизнь? Что если доменов будет несколько тысяч? Несколько десятков тысяч? Несколько сотен тысяч? )))) Такого, конечно, не будет, но я хочу понять слабые стороны каждого решения (а может быть есть еще одно решение, которое и является оптимальным?)

В первом варианте я вижу проблему в слишком большом мап файле. Как быстро nginx будет обрабатывать мак файл размеров в пару мегабайт? В во втором варианте - постоянные запросы к базе. Можно, конечно, кешировать записи не по отдельному домену, а по всем, тогда мы сократим кол-во запросов к postgres, но "напряжем" redis :)

Вот такая интересная (для меня) задача :)
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov
Web developer
Файл из одной строчки "root ...". Он инклюдится из конфига домена.
При смене пути перегенерируете первый файл или reload nginx.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы