Como condicionalmente combinar a localização no nginx

2

Gostaria de configurar a correspondência de local nginx, mas apenas para um endereço de origem específico. Infelizmente, se eu já coincidir com um local, mas não com a condição, não posso passar para o próximo local. Qual é o caminho para resolvê-lo bem?

server {
    ...
    location / {
        index app.php;
        try_files $uri @rewriteapp;
    }
    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }
    ...
    location ~ ^/admin {
        if ($source_trusted = "UNKNOWN") {
            return 403;
        }
    }
    ...
    location ~ ^/... {
        fcgi_pass ...
        ...
    }
}

Com essa configuração, ir para /admin de uma fonte que define $source_trusted = OK (via módulo geo) resulta em 404 , em vez do carregamento da página.

    
por viraptor 03.06.2014 / 12:10

1 resposta

3

Lembre-se de que o nginx geralmente avalia apenas um location , a menos que seja instruído especificamente para usar outro, como ao chamar um local nomeado em try_files (o que você faz).

Portanto, quando você atingir o local ^/admin , precisará apenas fazer o que for apropriado. Nesse caso, provavelmente será exatamente o mesmo try_files que você usou em location / .

    location ~ ^/admin {
        if ($source_trusted = "UNKNOWN") {
            return 403;
        }
        try_files $uri @rewriteapp;
    }
    
por 06.06.2014 / 21:02

Tags