Порядок, в котором Nginx включает файлы конфигурации, фиксированный или случайный? Apache прямо заявляет символы подстановки раскрываются в алфавитном порядке. С Nginx, похоже, это не применимо, и в руководстве об этом ничего не говорится.
В моей настройке 20_example.com
был включен раньше 00_default
, что противоречит моей цели определения общих директив (например, форматов журналов).
Согласно исходному коду nginx он использует функцию glob () с параметром GLOB_NOSORT, поэтому порядок включения файлов точно установить не удалось.
Это было изменено в ноябре 2012 г., впервые выпущен в 1.3.10. Из файл изменений:
теперь, если в Unix-системах используется директива include с маской, включаемые файлы сортируются в алфавитном порядке.
Ответ AD7six не совсем правильный. Порядок также имеет значение, когда два серверных блока имеют одинаковую «специфичность», например, когда оба используют регулярные выражения в server_name, а входящий запрос соответствует обоим:
server {
server_name ~^(www\.)?(?<domain>foo\.com|bar\.com|baz\.com)$;
...
}
и
server {
server_name ~^(www\.)?(?<domain>.+)$;
...
}
В этом сценарии два серверных блока не могут быть распределены по двум файлам, потому что их порядок не может быть гарантирован.
Поскольку OP указывает порядок log_format, это действительно очень важно, в случае пользовательских log_formats, если вы поместите в один и тот же каталог файлы обоих типов, некоторые файлы с log_formats, некоторые файлы с блоками серверов, которые используют эти log_formats, результатом будет очень неповторимая конфигурация.
На работе, когда мы впервые перевели нашу ручную ферму nginx в марионетку, мы начали видеть, как некоторые установки nginx с нуля терпят неудачу на идентичном оборудовании / настройке после множества отладочных странных ситуаций, таких как наличие двух / etc / nginx / * (- r) с md5match и одним и тем же двоичным кодом, дающим разные результаты (неверная ошибка log_format на одном и работа на другом), мы на собственном горьком опыте узнали, что заказ это действительно очень важно для некоторых директив, таких как log_format.
Мы исправили проблему, просто переместив генерацию серверных блоков из conf.d / * в другую папку, включенную после conf.d / *.