Nginx inclut des fichiers de configuration non en ordre?

12

L'ordre dans lequel Nginx inclut les fichiers de configuration est-il fixe ou aléatoire? Apache indique explicitement que les caractères génériques sont développés dans l'ordre alphabétique. Avec Nginx, il semble que cela ne s'applique pas, et le manuel n'en dit rien .

Dans ma configuration, a 20_example.comété inclus auparavant 00_default, ce qui va à l'encontre de mon objectif de définition de directives partagées (comme les formats de journal).

Jan Fabry
la source

Réponses:

3

La réponse d'AD7six n'est pas tout à fait correcte. L'ordre est également important lorsque deux blocs de serveur ont la même "spécificité", par exemple lorsque les deux utilisent des expressions rationnelles dans nom_serveur et que la demande entrante correspond aux deux:

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

et

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

Dans ce scénario, les deux blocs serveur ne peuvent pas être répartis sur deux fichiers car leur ordre ne peut alors pas être garanti.

rufo
la source
1

Comme OP souligne l'ordre log_format, il est en effet très important, dans le cas de log_formats personnalisés, si vous placez dans le même répertoire les deux types de fichiers, certains fichiers avec log_formats, certains fichiers avec des blocs serveurs qui utilisent ces log_formats, le résultat sera un configuration hautement irremplaçable.

Au travail, lorsque nous avons d'abord déplacé notre ferme nginx fabriquée à la main dans une marionnette, nous avons commencé à voir certaines installations de nginx à partir de zéro pour échouer dans un matériel / une configuration identique, après beaucoup de débogage de situations bizarres comme avoir deux / etc / nginx / * (- r) avec un md5match et le même binaire produisant des résultats différents (erreur log_format invalide sur l'un et travaillant sur l'autre), nous avons appris à la dure que l' ordre est en effet très important pour certaines directives comme log_format.

Nous avons résolu le problème en déplaçant simplement la génération des blocs serveur de conf.d / * vers un autre dossier inclus après conf.d / *.

Valeur
la source