locais aninhados nginx

48

Estou com problemas para entender locais aninhados no nginx. Eu tenho dois locais com algumas diretivas de configuração em comum, então, em vez de repetir as diretivas, prefiro repetir o URI usando uma expressão regular:

location ~ /a|/b {
        location /a {
        }
        location /b {
        }
}

No entanto, isso dá o erro

nginx: [emerg] location "/a" is outside location "/a|/b" in /etc/nginx/nginx.conf:36

Sem o ou | parece bem, no entanto.

location ~ /a {
        location /a {
        }
}

O que estou fazendo de errado? Existe uma maneira melhor de fazer isso sem repetir nada? Posso agrupar locais de outra maneira?

    
por Jayen 05.04.2013 / 09:09

1 resposta

82

Pergunta antiga, mas o problema é que o local pai é um local regex, enquanto os locais aninhados são locais de prefixo.

Você só pode definir locais de prefixo aninhado quando o local pai também é um local de prefixo:

location /a {
        location /a {
               # You can also skip this location and just write
               # your code directly under the parent location
        }
        location /a/b {
        ...
        }
}

Quando um local pai é definido por um regex, todos os locais aninhados também devem ser definidos por regexes:

location ~ ^/(a|b) {
        location ~ ^/a {
        ...
        }
        location ~ ^/b {
        ...
        }
}

No entanto, você também pode definir locais de regex aninhados quando o local pai for um local de prefixo:

location /a/b {
        location ~ /a {
        ...
        }
        location ~ /b {
        ...
        }
}
    
por 09.09.2014 / 17:00