Ich versuche, das folgende Muster zu arbeiten. Ich muss einen dynamischen Pfad in meinem clientseitigen Code angeben, um zu einigen vordefinierten Hosts wechseln zu können. Ich ordne diese Hosts ab, indem ich ihren Alias an eine/fwd/url angehängt habe. Die Alias wird an den realen Server in nginx wie folgt abgebildet:Dynamische Proxy_pass mit Karte und regexp
map $uri $repoUrl {
default invalid;
~^/fwd/foo/.* http://foo.domain.nl/;
~^/fwd/bar/.* http://bar.domain.nl/;
}
dann in der Serverkonfiguration Teil ertappe ich jede URL beginnend mit fwd und gelten den zugeordneten Alias-Wert. Der restliche Teil der URL, nach dem Alias, sollte ebenfalls an die URL angehängt werden.
location /fwd/(\w+)/(.*)$ {
add_header X-FwdHost "$repoUrl$2";
add_header Access-Control-Allow-Origin "*";
proxy_pass "$repoUrl$2";
proxy_redirect off;
access_log on;
}
Wenn ich dies zu testen mit:
curl -i http://localhost:8080/fwd/foo/something/else
ich:
X-FwdHost: http://foo.domain.nl/
Aber als Test die Ergebnisse aus der regexp ich:
$1: foo
$2: something/else
So Gesamt es scheint zu funktionieren. Die Regex scheint in Ordnung zu sein, aber ich kann es nicht in eine Zeichenfolge verketten? Irgendwelche Ideen oder gibt es einen leichteren/besseren Weg, um das Gleiche zu erreichen?
[EDIT]
fand ich einen möglicherweise viel einfachen Weg, dies zu tun, indem Sie einen Abfrage-Parameter vorwärts genannt werden. Erste Karte der Abfrage-Parameter auf ein die richtige host:
map $arg_forward $repo_forward {
default http://invalid_repo_forward/;
foo http://foo.domain.nl/;
bar http://bar.domain.nl/;
}
dann die Parameter in dem Pfad verwenden, um weitergeleitet:
location /fwd/ {
add_header X-FwdHost $repo_forward;
add_header Access-Control-Allow-Origin "*";
proxy_pass $repo_forward;
proxy_redirect off;
access_log on;
}
Ich würde erwarten, und URL wie:
http://localhost:8080/fwd/?forward=foo
Ergebnis:
http://foo.domain.nl/
... aber das funktioniert immer noch nicht. Ich bekomme eine 404 zurück. Was vermisse ich?
Jede Chance, Sie können eine "vollständige" Kopie der Lösung bitte posten. Ich folge dem (so weit ich kann), aber immer noch 404. Alstublief. – Guy