Nginx включає конфігураційні файли не в порядку?


12

Чи порядок, у якому Nginx включає файли конфігурації, фіксований, або випадковий? Apache прямо заявляє, що символи підстановки розширюються в алфавітному порядку. З Nginx, здається, це не стосується, і керівництво про це нічого не говорить .

У моєму налаштуванні 20_example.comбув включений раніше 00_default, що перемагає мою мету визначення загальних директив (як формати журналів) там.

Відповіді:


23

Відповідно до вихідного коду nginx, він використовує функцію glob () з параметром GLOB_NOSORT , тому порядок включення файлів неможливо було чітко встановити.

Це було змінено в листопаді 2012 року , вперше випущене в 1.3.10. З файлу змін :

Тепер, якщо директива "включати" з маскою використовується в системах Unix, включені файли сортуються в алфавітному порядку.


3

Відповідь AD7six не зовсім коректна. Порядок також має значення, коли два блоки сервера мають однакову "специфіку", наприклад, коли обидва використовують регулярні вирази в ім'я_сервера, і вхідний запит відповідає обом:

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

і

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

У цьому випадку два серверні блоки не можуть бути розповсюджені на два файли, оскільки їх порядок не міг бути гарантованим.


1

Як зазначає ОП, порядок log_format - це дійсно дуже важливо, у випадку користувацьких log_format, якщо ви розміщуєте в одному режимі файли обох типів, деякі файли з log_formats, деякі файли з блоками серверів, які використовують ці log_formats, результат буде дуже неповторна конфігурація.

На роботі, коли ми вперше перенесли власноруч виготовлену ферму nginx в маріонеткову, ми почали бачити деякі nginx установки з нуля і закінчуватись помилкою в ідентичному апаратному / установчому режимі, після багатьох налагоджень химерних ситуацій, таких як наявність двох / etc / nginx / * (- r) з md5match і тим самим двійковим кодом, що дає різні результати (невірна помилка log_format на одній і робота над іншими), ми дізналися важкий спосіб, що порядок дійсно дуже важливий для деяких директив, таких як log_format.

Ми вирішили проблему, просто перемістивши генерацію серверних блоків з conf.d / * в іншу папку, включену після conf.d / *.

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