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

11

A ordem na qual o Nginx inclui arquivos de configuração é fixa ou aleatória? O Apache afirma explicitamente que 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.com foi incluído antes de 00_default , o que acaba com meu propósito de definir diretivas compartilhadas (como formatos de log).

    
por Jan Fabry 17.02.2012 / 10:45

3 respostas

20

De acordo com o código-fonte do nginx ele usa a função glob () com o GLOB_NOSORT parâmetro , portanto, a ordem de inclusão do arquivo não pôde ser claramente estabelecida.

Este foi alterado em novembro de 2012 , lançado pela primeira vez em 1.3.10. A partir do alterar o arquivo :

now if the "include" directive with mask is used on Unix systems, included files are sorted in alphabetical order.

    
por 17.02.2012 / 12:42
3

A resposta do AD7six não está totalmente correta. A ordem também é importante quando dois blocos de servidores têm a mesma "especificidade", por exemplo, quando ambos usam regexes 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 em dois arquivos porque sua ordem não poderia ser garantida.

    
por 22.07.2012 / 22:15
1

Como o OP aponta a ordem log_format é realmente muito importante, no caso do log_formats customizado, se você colocar no mesmo diretório os dois tipos de arquivos, alguns arquivos com log_formats, alguns arquivos com servidores que fazem uso daqueles log_formats, result será uma configuração altamente irrepetível.

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

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

    
por 17.10.2012 / 18:16