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

Чи можна вказати кореневий шлях відносно файлу, що містить конф?

Коротка відповідь: Ні.

Довга відповідь: 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 Ви праві. Оновіть відповідь зараз. Звичайно, це не повно. Але краще, ніж оригінальна відповідь (це справді було неправильним / неточним).
Поті Калімуту

Я читаю Nginx від початківця до Pro, зазначається, що: "Ви вже бачили використання кореневої директиви всередині блоку розташування. Коренева директива повідомляє Nginx повертати /image/myimage.jpg замість повністю кваліфікованого шляху / тощо / nginx / html / app1 / image / myimage.jpg. " так що IMHO це означає, що Nginx config підтримує відносні виправлення?
Веб-жінка

Тут питання є специфічним для "root" директиви та чи може вона підтримувати "відносний шлях до файлу conf".
Поті Калімуту

0

Я не знайшов способу використання відносних шляхів або визначення глобальних змінних, але ця маленька хитрість вирішує мою проблему.


3
Яка маленька хитрість?
Майкл Хемптон

Я не можу визначити змінну, але я можу використовувати mapдирективу з одним defaultзначенням, яка буде грати роль змінної для мене.
Антон Мойсеєв
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.