Come può essere configurato un reindirizzamento in nginx per rispondere a un determinato URL con un reindirizzamento relativo a un percorso specifico?come emettere un url relativo redirect da nginx?
Il nginx documentation suggerisce che questa è la modalità predefinita per nginx, ma in realtà se la posizione da reindirizzare inizia con un/nginx risponde con un URL assoluto nel campo Posizione.
per la configurazione del server locale che contiene posizioni:
location = /a {
return 301 some/path;
}
location = /b {
return 301 /qwerty;
}
la risposta posizione a una richiesta di/a è:
Location: some/path
e per/b è:
Location: http://127.0.0.1/qwerty
tuttavia, vorremmo/b rispondere con:
Location: /qwerty
Il motivo per cui vorremmo utilizzare i reindirizzamenti relativi è che vorremmo accedere a nginx da diversi domini e proxy, ad es. in chiaro in dev o tramite load balancer con terminazione di ssl, e preferiremmo mantenere le cose semplici sollevando nginx dal dover capire quel contesto.
proposito questi esempi sono stati testati contro versioni nginx 1.4.6 e 1.9.6, utilizzando arricciatura es .:
curl --head http://127.0.0.1/b
Bel trucco con uno spazio nella direttiva "ritorno". Questo comportamento di nginx è documentato ovunque? –
Quel trucco spaziale è esilarante e fantastico, come l'hai scoperto? –
hi @TrevorFreeman, RFC 2616 consente effettivamente "ingannare lo spazio". Nel capitolo "4.2 Intestazioni dei messaggi", il valore dell'intestazione è definito come "valore-campo = * (campo-contenuto | LWS)". '* LWS' significa zero o molti' spazi bianchi lineari '. – xiaochen