Ernillew
@Ernillew
Администрирую *nix-системы с 1997 года

Использование переменных в конфиге nginx'а. Почему $server_name не работает в error_log и некоторых других директивах? Какие еще варианты?

Собственно весь вопрос в заголовке.
Имеем nginx, у него имеем 100% типовые куски конфигов для разных хостов на сервере, типа
location /.well-known/acme-challenge {
             alias /srv/www/.well-known/acme-challenge;
}
    
location / {
        return 301 https://$server_name$request_uri;
}
        access_log /var/log/nginx/$server_name.access.log;


А вотerror_log /var/log/nginx/$server_name.error.log;
у нас работать не будет, а создаст нам файл /var/log/nginx/$server_name.error.log, вместо файла с именем сервера.
Такая же проблема с ssl_certificate, ssl_certificate_key и ssl_trusted_certificate, нельзя в пути к файлам указать $server_name, что бы не писать в каждом конфиге путь к файлу с сертификатом, а вынести этот кусок в отдельный инклюд.

В чем причина? Просто разработчики не озаботились обработкой переменных в данных параметрах конфига или есть причины по котором они не озаботились? Кто какие обходные пути может использует для данных мест конфигов.
  • Вопрос задан
  • 4009 просмотров
Пригласить эксперта
Ответы на вопрос 2
Lynn
@Lynn
nginx, js, css
Всё просто. Директива error_log не поддерживает переменные в путях к файлу.

https://forum.nginx.org/read.php?2,178665,178680#m...

There is no variables support in error_log directive (and it's
unlikely to appear), so "...error_log" file is expected.


UPD:
В момент когда нужна запись в error_log это должно быть сделано быстро и с минимальными затратами. Интреполяция переменных это лишнее действие. К тому же, если имя файла известно заранее, то он открывается на запись мастер-процессом в момент (ре-)старта приложения, а если бы его приходилось вычислять на основании значений каких-то переменных, то и открывать пришлось бы уже в воркере и прямо перед записью, а это ни разу не быстро и, к тому же, у воркера обычно меньше прав и неплохие шансы, что он просто не сможет открыть файл.

Если у вас реально есть потребность в большом количестве разных серверов, то никто не мешает вам взять любой из существующих шаблонизаторов (или написать свой велосипед) и сгенерить хоть тысячи однотипных файлов конфигов.
Ответ написан
Комментировать
sim3x
@sim3x
Где поискать красивые конфиги nginx или как сделать красивым мой?

VBart изменилось ли мнение комманды на счет данного вопроса?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы