Nginx zawiera pliki konfiguracyjne nie w kolejności?

12

Czy kolejność, w jakiej Nginx zawiera pliki konfiguracyjne, jest stała czy losowa? Apache wyraźnie stwierdza, że znaki wieloznaczne są rozwijane w kolejności alfabetycznej. W przypadku Nginx wydaje się, że tak nie jest, a instrukcja nic o tym nie mówi .

W mojej konfiguracji 20_example.comzostał już uwzględniony 00_default, co nie pozwala mi zdefiniować tam wspólnych dyrektyw (takich jak formaty logów).

Jan Fabry
źródło

Odpowiedzi:

3

Odpowiedź AD7six nie jest całkowicie poprawna. Kolejność ma również znaczenie, gdy dwa bloki serwera mają tę samą „specyficzność”, na przykład gdy oba używają wyrażeń regularnych w nazwa_serwera, a przychodzące żądanie jest zgodne z obydwoma:

server {
    server_name ~^(www\.)?(?<domain>foo\.com|bar\.com|baz\.com)$;
    ...
}

i

server {
    server_name ~^(www\.)?(?<domain>.+)$;
    ...
}

W tym scenariuszu dwóch bloków serwera nie można rozłożyć na dwa pliki, ponieważ nie można wtedy zagwarantować ich kolejności.

rufo
źródło
1

Jak OP wskazuje kolejność log_format, jest to naprawdę bardzo ważne, w przypadku niestandardowych formatów log, jeśli umieścisz w tym samym katalogu pliki obu typów, niektóre pliki z formatami log, niektóre pliki z blokami serwerów, które korzystają z tych formatów log, wynikiem będzie wysoce niepowtarzalna konfiguracja.

W pracy, kiedy po raz pierwszy przenieśliśmy ręcznie robioną farmę nginx w marionetkę, zaczęliśmy widzieć od zera niektóre instalacje nginx, które uległy awarii w identycznym sprzęcie / konfiguracji, po wielu dziwnych sytuacjach debugowania, takich jak posiadanie dwóch / etc / nginx / * (- r) z md5match i tym samym plikiem binarnym dającym różne wyniki (nieprawidłowy błąd log_format na jednym i praca na drugim), nauczyliśmy się, że kolejność jest naprawdę bardzo ważna dla niektórych dyrektyw, takich jak log_format.

Rozwiązaliśmy ten problem, przenosząc generowanie bloków serwerów z conf.d / * do innego folderu dołączonego po conf.d / *.

Dzielność
źródło