O Nginx inclui arquivos de configuração que não estão em ordem?

12

A ordem na qual o Nginx inclui arquivos de configuração é fixa ou aleatória? O Apache declara explicitamente os caracteres curinga são expandidos em ordem alfabética. Com o Nginx, parece que isso não se aplica, e o manual não diz nada sobre isso .

Na minha configuração, 20_example.comfoi incluído anteriormente 00_default, o que anula meu objetivo de definir diretivas compartilhadas (como formatos de log) lá.

Jan Fabry
fonte

Respostas:

3

A resposta do AD7six não está totalmente correta. A ordem também é importante quando dois blocos de servidor têm a mesma "especificidade", por exemplo, quando ambos usam expressões regulares em server_name, e a solicitação recebida corresponde a ambos:

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

e

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

Nesse cenário, os dois blocos de servidor não podem ser distribuídos por dois arquivos, porque sua ordem não pode ser garantida.

rufo
fonte
1

Como OP indica a ordem do log_format, é realmente muito importante, no caso de log_formats personalizados, se você colocar no mesmo diretório os arquivos dos dois tipos, alguns com log_formats, alguns arquivos com blocos de servidores que fazem uso desses log_formats, o resultado será um configuração altamente irrepetível.

No trabalho, quando movemos nosso farm nginx feito à mão para fantoches, começamos a ver algumas instalações nginx do zero para falhar em um hardware / configuração idêntico, depois de muitas situações bizarras de depuração, como ter dois / etc / nginx / * (- r) com um md5match e o mesmo binário produzindo resultados diferentes (erro inválido de log_format em um e trabalhando no outro), aprendemos da maneira mais difícil que ordem é realmente muito importante para algumas diretivas como log_format.

Corrigimos o problema apenas movendo a geração de blocos do servidor de conf.d / * para outra pasta incluída após conf.d / *.

Valor
fonte