Nginx, verifique o método de solicitação sem usar IF?

1

Estou tentando otimizar minha configuração do Nginx, mas me deparo com um problema que não sei como corrigir. Eu tenho uma pasta /images no meu servidor a partir da qual eu entrego vários arquivos estáticos para um site. A mesma pasta também é usada para fazer upload de arquivos via WebDAV.

Portanto, tenho que verificar se todas as solicitações estão no arquivo estático E se o método de solicitação for GET , entregarei o arquivo. Caso contrário, suponho que a solicitação estava relacionada ao WebDAV (como PUT, etc). Veja este exemplo:

if ($uri ~* ^/images)         { set $getimages "${getimages}A"; }
if ($request_method = GET)    { set $getimages "${getimages}B"; }
if ($getimages = "AB") {
    rewrite ^ $uri$args last;
}

Este exemplo acima funciona bem. Mas eu queria saber se há outra maneira de fazer isso, sem usar o IF. Dada a referência IfIsEvil no Wiki Nginx

Idéias, alguém?

    
por Phil 03.10.2013 / 03:26

1 resposta

1

Poste novamente comentário de Pothi como CW

If não é mal , se usado fora de um bloco location ! Mesmo dentro de um bloco location , ele pode ser usado com as diretivas return e rewrite !

Snippet da página IfIsEvil

Directive if has problems when used in location context, in some cases it doesn't do what you expect but something completely different instead. In some cases it even segfaults. It's generally a good idea to avoid it if possible.

The only 100% safe things which may be done inside if in location context are:

return ...;
rewrite ... last;

Anything else may possibly cause unpredictable behaviour, including potential SIGSEGV.

    
por 13.04.2017 / 14:14