Ist es möglich / wie kann ich einen Nginx-Standortblock so konfigurieren, dass er je nach Anforderungsmethode (z. B. GET / POST) für verschiedene Backends Proxy-Funktionen verwendet?
Der Grund dafür ist, dass ich momentan die 2 Methoden unter 2 verschiedenen URLs (eine über http-Proxy und die andere über fcgi) bearbeite und versuche, es "REST" -voller zu machen, damit die GETting-Ressource die Liste im Idealfall zurückgibt Wenn Sie einen POST an dieselbe Ressource senden, sollte dies zur Liste hinzugefügt werden.
if
durch die im Allgemeinen Nginx Dokumentation wird abgeraten: nginx.com/resources/wiki/start/topics/depth/ifisevilObwohl Sie dies mit erreichen könnten
if
, wird dies in der Nginx-Dokumentation im Allgemeinenif
nicht empfohlen , da es mit anderen Anweisungen nicht gut funktioniert. Angenommen, GET sollte für alle Benutzer geöffnet sein, während POST nur für authentifizierte Benutzer mit HTTP Basic Auth gilt. Das müssteif
mit kombiniert werdenauth_basic
, was nicht richtig funktioniert.Hier ist eine Alternative, die ohne geht
if
. Der Trick besteht darin, "GET" und "POST" als Teil der Upstream-Namen zu verwenden, damit diese durch Variablensubstitution behoben werden können:Um dies mit HTTP Basic Auth für alles außer GET zu kombinieren, fügen Sie einfach einen
limit_except
Block hinzu:quelle
502 gateway error
wegenno resolver defined to resolve other_HEAD
(oder was auch immer Ihr fehlender Upstream ist) zurückkehren werden. Es wird semantischer sein, so etwas zurückzugeben405 method not allowed
. Gibt es eine Möglichkeit, dies zu erreichen?Dies ist, was ich getan habe, um Dinge für mich arbeiten zu lassen
quelle
Leichte Änderung der Antwort von vog, um einen Standard-Handler für andere Methoden wie OPTIONEN, PUT usw. einzuschließen.
quelle
Ich konnte nicht die Antwort von @timmmmmy an der Arbeit, aber es weist mich auf die Karte Dokumentation und dies ist für mich:
quelle