¿Es posible / cómo puedo configurar un bloque de ubicación Nginx para proxy a diferentes backends dependiendo del método de solicitud (es decir, GET / POST)?
La razón es que actualmente estoy manejando los 2 métodos en 2 URL diferentes (uno a través de proxy HTTP y el otro a través de fcgi) y estoy tratando de hacerlo más "REST", así que lo ideal sería que OBTENGA el recurso para devolver la lista , mientras que PUBLICAR en el mismo recurso debe agregar a la lista.
if
la documentación de Nginx generalmente desalienta: nginx.com/resources/wiki/start/topics/depth/ifisevilAunque podría lograr esto con
if
, la documentación de Nginx generalmente desalienta esto , porqueif
no funciona bien con otras directivas. Por ejemplo, suponga que GET debe estar abierto para todos, mientras que POST es solo para usuarios autenticados, utilizando HTTP Basic Auth. Eso requeriríaif
combinarse conauth_basic
, lo que no funciona correctamente.Aquí hay una alternativa que funciona sin
if
. El truco consiste en utilizar "GET" y "POST" como parte de los nombres ascendentes, por lo que estos pueden abordarse mediante la sustitución de variables:Para combinar esto con HTTP Basic Auth para todo menos GET, solo agregue un
limit_except
bloque:fuente
502 gateway error
porno resolver defined to resolve other_HEAD
(o lo que sea que falte). Será más semántico devolver algo como405 method not allowed
. ¿Hay alguna manera de lograr esto?Esto es lo que hice para que las cosas funcionen para mí.
fuente
Ligero cambio en la respuesta de vog para incluir un controlador predeterminado para otros métodos como OPTIONS, PUT, etc.
fuente
No pude obtener la respuesta de @timmmmmy para trabajar, pero me señaló la documentación del mapa y esto funcionó para mí:
fuente