Czy to możliwe / jak mogę skonfigurować blok lokalizacji Nginx do proxy do różnych backendów w zależności od metody żądania (np. GET / POST)?
Powodem jest to, że obecnie obsługuję 2 metody pod dwoma różnymi adresami URL (jeden za pośrednictwem serwera proxy HTTP, a drugi za pośrednictwem fcgi) i staram się, aby było to bardziej „REST”, więc idealnie byłoby, gdyby GETting zasób zwrócił listę , podczas gdy test POST do tego samego zasobu powinien zostać dodany do listy.
if
generalnie odradza to dokumentacja Nginx: nginx.com/resources/wiki/start/topics/depth/ifisevilChociaż można to osiągnąć za pomocą dokumentacji Nginx ,
if
ogólnie nie jest to zalecane , ponieważif
nie działa dobrze z innymi dyrektywami. Załóżmy na przykład, że GET powinien być otwarty dla wszystkich, podczas gdy POST jest przeznaczony tylko dla uwierzytelnionych użytkowników korzystających z HTTP Basic Auth. Wymagałobyif
to połączenia z tymauth_basic
, co nie działa poprawnie.Oto alternatywa, która działa bez
if
. Sztuką jest użycie „GET” i „POST” jako części nadrzędnych nazw, więc można je rozwiązać przez podstawienie zmiennych:Aby połączyć to z HTTP Basic Auth dla wszystkiego oprócz GET, po prostu dodaj
limit_except
blok:źródło
502 gateway error
powoduno resolver defined to resolve other_HEAD
(lub cokolwiek, czego brakuje w górnej części łańcucha). Zwrot czegoś takiego będzie bardziej semantyczny405 method not allowed
. Czy istnieje sposób na osiągnięcie tego?To właśnie zrobiłem, aby wszystko działało dla mnie
źródło
Niewielka zmiana w odpowiedzi voga, aby uwzględnić domyślny moduł obsługi dla innych metod, takich jak OPTIONS, PUT itp.
źródło
Nie mogłem uzyskać odpowiedzi z @timmmmmy do pracy, ale wskazało mi to dokumentację mapy i to zadziałało dla mnie:
źródło