2017-05-23 5 views
1

Ich habe NGINX Hosting viele Drop-in-Anwendungen, die in der Regel alle die gleiche API verwenden. Mein nginx hat einen Standort Block für die api, so etwas LiekNGINX Location Block immer umleiten an anderen Ort

location /default-api/ { 
    proxy_pass https://some/location.com; 
} 

Normalerweise jede GUI die gleiche api nutzen wollen, möchten jemand gelegentlich obwohl die api eine bestimmte Anwendung verwendet ändern. Ich wollte, dass jede GUI so konfiguriert wird, dass sie eine andere URL trifft, so dass es einfacher ist, diese URL später umzuleiten, wenn jemand ihre API ändern möchte, aber stattdessen jede URL in jedem Standortblock, den ich auf den Standard umleiten wollte, hart codieren sollte -api.

So effektiv möchte ich so etwas wie, wenn es funktionieren würde

location /foo-api/ { 
    redirect /default-api/; 
} 

Standort/Bar-api/{ Umleitung/default-api /; }

location /baz-api/ { 
    redirect /default-api/; 
} 

ich dachte, als ich zum ersten Mal mit nginx gespielt, dass ich eine sehr einfache Richtlinie sah, dies zu tun, aber ich kann es jetzt nicht finden. Ich weiß, dass eine Reihe von Direktiven dies tun könnte, aber keine von denen, die ich kenne, fühlt sich sauber genug an, um es wert zu sein.

Umschreiben erfordert einen übermäßig komplexen Regex, Umleitung erfordert, dass der Client eine neue Abfrage erstellt, nachdem er die Umleitung erhalten hat. proxy_pass führt einige unnötige Proxying-Logik durch, alle drei scheinen zu verlangen, dass ich den Servernamen in den Umleitungspfad festcodiere. Das sauberste, was ich herausfinden konnte, war möglicherweise Tryfiles in einer Weise, für die es nicht gemacht wurde.

Gibt es eine einfachere Anweisung, eine interne Weiterleitung wie diese zu machen?

Antwort

1

Zwei Vorschläge.

1) Kommentieren Sie die location /foo-api Block, wenn es gebraucht wird:

location/{ 
    rewrite ... ... break; # if required to normalize the /prefix/... 
    proxy_pass ...; 
} 
# location/foo-api/ { } # disabled - use `location /` 

2) eine benannte Stelle verwenden:

location /default-api/ { 
    try_files /nonexistent @api; 
} 
location /foo-api/ { 
    try_files /nonexistent @api; 
} 
location @api { 
    rewrite ... ... break; # if required to normalize the /prefix/... 
    proxy_pass https://some/location.com; 
} 
+0

Ja jene ziemlich die Ideen waren die ich hatte. Beide sind nicht ganz so schön, wie ich es gerne getan hätte, aber ich nehme deine Antwort als Bestätigung, dass es keine einfache Anweisung gibt, zu tun, was ich will, dass ich vermisse :) – dsollen