Est-il possible / comment puis-je configurer un bloc d'emplacement Nginx pour un proxy vers différents backends en fonction de la méthode de demande (c'est-à-dire GET / POST)?
La raison en est que je gère actuellement les 2 méthodes à 2 URL différentes (une via le proxy http et l'autre via fcgi) et j'essaie de le rendre plus "REST", donc, idéalement, j'aimerais obtenir la ressource pour renvoyer la liste , tandis que le POST sur la même ressource devrait s'ajouter à la liste.
if
est généralement déconseillé par la documentation Nginx: nginx.com/resources/wiki/start/topics/depth/ifisevilBien que vous puissiez y parvenir avec
if
, cela est généralement déconseillé par la documentation Nginx , carif
ne fonctionne pas bien avec d'autres directives. Par exemple, supposons que GET doit être ouvert à tout le monde, alors que POST est uniquement destiné aux utilisateurs authentifiés, en utilisant HTTP Basic Auth. Cela nécessiteraitif
d'être combiné avecauth_basic
, ce qui ne fonctionne pas correctement.Voici une alternative qui fonctionne sans
if
. L'astuce consiste à utiliser "GET" et "POST" dans le cadre des noms en amont, afin que ceux-ci puissent être traités par substitution de variable:Pour combiner cela avec HTTP Basic Auth pour tout sauf GET, ajoutez simplement un
limit_except
bloc:la source
502 gateway error
cause deno resolver defined to resolve other_HEAD
(ou quel que soit votre manquant en amont). Il sera plus sémantique de renvoyer quelque chose comme405 method not allowed
. Existe-t-il un moyen d'y parvenir?C'est ce que j'ai fait pour que les choses fonctionnent pour moi
la source
Légère modification de la réponse de vog pour inclure un gestionnaire par défaut pour d'autres méthodes comme OPTIONS, PUT, etc.
la source
Je n'ai pas pu obtenir la réponse de @timmmmmy au travail, mais cela m'a indiqué la documentation de la carte et cela a fonctionné pour moi:
la source