Nginx: корневой путь относительно файла conf

17

Можно ли указать rootпуть относительно содержащегося файла conf?

Мы разрабатываем веб-приложение и храним app-nginx.confфайл со специфичной для приложения конфигурацией в каталоге проекта. Я хочу иметь возможность включить этот файл в основной nginx.confи иметь rootпуть, правильно ссылающийся на требуемый подкаталог проекта. Пример:

# /etc/nginx/nginx.conf
http {
    include /absolute/path/to/app/app-nginx.conf
}


# /absolute/path/to/app/app-nginx.conf
server {
    server_name localhost;
    listen 9090;

    root ./app;
}

После запуска nginx с аналогичной конфигурацией nginx пытается определить ./appпуть относительно каталога установки nginx ( /usr/local/Cellar/nginx/1.4.3/в моем случае), а не каталога приложения.

Антон Моисеев
источник

Ответы:

11

Можно ли указать корневой путь относительно содержащегося файла conf?

Краткий ответ: Нет.

Длинный ответ: Nginx, по умолчанию, знает только о том пути , такие как --prefixи --conf-path, которые устанавливаются во время компиляции (ссылка: https://nginx.org/en/docs/configure.html ). Мы можем найти различные пути, используемые Nginx, запустив команду nginx -V(это заглавная буква «V»). Итак, --conf-pathгде находится основной nginx.confфайл, и этот путь используется для любых относительных путей.

Согласно официальной документации ( https://nginx.org/r/root ), rootдиректива может содержать и другие переменные.

Спасибо за @cyker за разъяснения после 5 лет публикации первоначального ответа!

Поти Калимуту
источник
Спасибо, Поти. К сожалению, ни один из вариантов не работает для меня. --prefixможет повлиять на другие серверы nginx и, с моей личной точки зрения, управлять им немного сложнее по сравнению с файлом конфигурации. И nginx не позволяет создавать пользовательские переменные с setдирективой вне serverконтекста, поэтому я не могу переместить абсолютный путь из моего файла app-nginx.conf.
Антон Моисеев
Таким образом, этот путь используется для любых относительных путей. Я думаю, что это неточно. Кажется, nginx будет использовать config dir для параметров includeи ssl_certificate, например, но будет использовать префикс dir для таких параметров, как root. Кажется, я не придумываю полный список того, какой вариант используется.
Cyker
@ Cyker Вы правы. Обновил ответ сейчас. Конечно, это не завершено. Но лучше, чем оригинальный ответ (это было действительно неправильно / неточно).
Поти Калимуту
Я читаю Nginx От новичка до Pro, отмечается, что: «Вы уже видели использование корневой директивы внутри блока местоположения. Корневая директива говорит Nginx возвращать /image/myimage.jpg вместо полностью определенного пути / etc / Nginx / html / app1 / изображение / myimage.jpg «. так имхо это значит что конфиг Nginx поддерживает относительные патчи?
Webwoman
Здесь вопрос специфичен для директивы root и может ли она поддерживать «относительный путь к файлу conf».
Поти Калимуту
0

Я не нашел способа использовать относительные пути или определить глобальные переменные, но этот маленький трюк решает мою проблему.

Антон Моисеев
источник
3
Какой маленький трюк?
Майкл Хэмптон
Я не могу определить переменную, но я могу использовать mapдирективу с одним defaultзначением, которая будет играть роль переменной для меня.
Антон Моисеев