Nginx: ścieżka katalogu głównego względem pliku conf

17

Czy można określić rootścieżkę względem zawierającego plik conf?

Tworzymy aplikację internetową i przechowujemy app-nginx.confplik z konfiguracją specyficzną dla aplikacji w katalogu projektu. Chcę móc włączyć ten plik do głównego nginx.confi mieć rootścieżkę poprawnie odwołującą się do podkatalogu wymaganego projektu. Przykład:

# /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;
}

Po uruchomieniu nginx z podobną konfiguracją nginx próbuje rozwiązać ./appścieżkę względem katalogu instalacyjnego nginx ( /usr/local/Cellar/nginx/1.4.3/w moim przypadku), a nie do katalogu aplikacji.

Anton Moiseev
źródło

Odpowiedzi:

11

Czy jest możliwe określenie ścieżki głównej względem zawierającego plik conf?

Krótka odpowiedź: nie

Długa odpowiedź: Nginx domyślnie zna tylko takie ścieżki, jak --prefixi --conf-pathustawione w czasie kompilacji (patrz: https://nginx.org/en/docs/configure.html ). Możemy znaleźć różne ścieżki używane przez Nginx, uruchamiając polecenie nginx -V(jest to wielkie „V”). Więc, --conf-pathgdzie główne nginx.confmiejsce zamieszkania plików i że ścieżka jest używana do żadnych ścieżek względnych.

Zgodnie z oficjalną dokumentacją ( https://nginx.org/r/root ) rootdyrektywa może jednak zawierać inne zmienne.

Dzięki za @cyker za wyjaśnienie po 5 latach od opublikowania wstępnej odpowiedzi!

Pothi Kalimuthu
źródło
Dziękuję, Pothi. Niestety żadna z opcji nie działa dla mnie. --prefixmoże wpływać na inne serwery nginx iz mojego osobistego punktu widzenia trochę trudniej zarządzać w porównaniu do pliku konfiguracyjnego. A nginx nie pozwala na tworzenie zmiennych niestandardowych z setdyrektywą poza serverkontekstem, więc nie mogę przenieść ścieżki bezwzględnej z mojego pliku app-nginx.conf.
Anton Moiseev
Tak więc ta ścieżka jest używana dla dowolnych ścieżek względnych. Myślę, że to niedokładne. Wygląda na to, że nginx użyje config dir dla opcji includei ssl_certificate, na przykład, użyje prefiksu dir dla opcji takich jak root. Wydaje mi się, że nie mam pełnej listy, z której korzysta każda opcja.
Cyker
@Cyker Masz rację. Zaktualizowałem odpowiedź teraz. Oczywiście nie jest kompletna. Ale lepsze niż pierwotna odpowiedź (to było rzeczywiście złe / niedokładne).
Pothi Kalimuthu
Czytam Nginx Od początkującego do Pro, zauważono, że: „Widziałeś już użycie dyrektywy root w bloku lokalizacji. Dyrektywa root mówi Nginx, aby zwróciła /image/myimage.jpg zamiast w pełni kwalifikowanej ścieżki / etc / nginx / html / app1 / image / myimage.jpg. " więc IMHO oznacza, że ​​konfiguracja Nginx obsługuje względne ścieżki?
Webwoman
Tutaj pytanie jest specyficzne dla dyrektywy „root” i czy może ona obsługiwać „względną ścieżkę do pliku conf”.
Pothi Kalimuthu,
0

Nie znalazłem sposobu na użycie ścieżek względnych lub zdefiniowanie zmiennych globalnych, ale ta mała sztuczka rozwiązuje mój problem.

Anton Moiseev
źródło
3
Jaka mała sztuczka?
Michael Hampton
Nie mogę zdefiniować zmiennej, ale mogę użyć mapdyrektywy z pojedynczą defaultwartością, która będzie dla mnie odgrywać rolę zmiennej.
Anton Moiseev,