Sto cercando di ottenere il seguente schema per funzionare. Devo specificare un percorso dinamico nel mio codice lato client per poter passare ad alcuni host predefiniti. Mappo questi host aggiungendo il loro alias a/fwd/url. L'alias viene mappato al server reale nginx come questo:proxy_pass dinamico con mappa e espressione regolare
map $uri $repoUrl {
default invalid;
~^/fwd/foo/.* http://foo.domain.nl/;
~^/fwd/bar/.* http://bar.domain.nl/;
}
Poi, nella parte server config prendo qualsiasi url che comincia per FWD e applicare il valore alias mappato. La parte rimanente dell'URL, dopo l'alias, dovrebbe essere aggiunta all'URL.
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;
}
Se provo questo con:
curl -i http://localhost:8080/fwd/foo/something/else
ottengo:
X-FwdHost: http://foo.domain.nl/
Ma quando prova i risultati del regexp ottengo:
$1: foo
$2: something/else
Quindi nel complesso sembra che funzioni. La regex sembra essere ok, ma non riesco a farlo concatenare in una stringa? Qualche idea o c'è un modo più semplice/migliore per realizzare lo stesso?
[EDIT]
ho trovato un modo forse molto più facile da fare questo, utilizzando un parametro di query denominata in avanti. In primo luogo mappare il parametro di query a una destra host:
map $arg_forward $repo_forward {
default http://invalid_repo_forward/;
foo http://foo.domain.nl/;
bar http://bar.domain.nl/;
}
quindi utilizzare il parametro nel percorso da inoltrare:
location /fwd/ {
add_header X-FwdHost $repo_forward;
add_header Access-Control-Allow-Origin "*";
proxy_pass $repo_forward;
proxy_redirect off;
access_log on;
}
mi si aspetterebbe e url del tipo:
http://localhost:8080/fwd/?forward=foo
Per ottenere in:
http://foo.domain.nl/
... ma ciò non funziona. Ricevo un 404 restituito. Cosa mi manca?
Ogni possibilità di inviare una copia "completa" della soluzione per favore. Sto seguendo questo (per quanto posso) ma sto ancora ricevendo 404. Alstublieft. – Guy