Embora você possa conseguir isso com if
, isso geralmente é desencorajado pela documentação do Nginx , porque if
não funciona bem com outras diretivas. Por exemplo, suponha que GET esteja aberto para todos, enquanto o POST é somente para usuários autenticados, usando HTTP Basic Auth. Isso exigiria que if
fosse combinado com auth_basic
, o que não funciona corretamente.
Aqui está uma alternativa que funciona sem if
. O truque é usar "GET" e "POST" como parte dos nomes upstream, para que estes possam ser resolvidos por substituição de variáveis:
http {
upstream other_GET {
server ...;
}
upstream other_POST {
server ...;
}
server {
location /service {
proxy_pass http://other_$request_method;
}
}
}
Para combinar isso com o HTTP Basic Auth para tudo, exceto GET, basta adicionar um limit_except
bloco:
...
location /service {
proxy_pass http://other_$request_method;
limit_except GET {
auth_basic ...;
}
}
...