É possível / como posso configurar um bloco de localização do Nginx para proxy para back-end diferentes, dependendo do método de solicitação (por exemplo, GET / POST)?
O motivo é que, atualmente, estou lidando com os 2 métodos em 2 URLs diferentes (um via proxy http e outro via fcgi) e estou tentando torná-lo mais "REST"; portanto, o ideal é que GETting the resource retorne a lista , enquanto o POST no mesmo recurso deve ser adicionado à lista.
if
geralmente é desencorajado pela documentação do Nginx: nginx.com/resources/wiki/start/topics/depth/ifisevilEmbora você possa conseguir isso
if
, isso geralmente é desencorajado pela documentação do Nginx , porqueif
não funciona bem com outras diretivas. Por exemplo, suponha que GET deva ser aberto para todos, enquanto POST é apenas para usuários autenticados, usando HTTP Basic Auth. Isso exigiriaif
ser combinado comauth_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 possam ser resolvidos por substituição de variável:Para combinar isso com o HTTP Basic Auth para tudo, menos GET, basta adicionar um
limit_except
bloco:fonte
502 gateway error
devido ano resolver defined to resolve other_HEAD
(ou seja lá qual for a sua falta de upstream). Será mais semântico retornar algo como405 method not allowed
. Existe uma maneira de conseguir isso?Isto é o que eu fiz para fazer as coisas funcionarem para mim
fonte
Altere ligeiramente a resposta do vog para incluir um manipulador padrão para outros métodos, como OPTIONS, PUT, etc.
fonte
Não consegui obter a resposta do @timmmmmy para funcionar, mas ele me indicou a documentação do mapa e isso funcionou para mim:
fonte