2013-01-24 11 views
26

L'idea è quella di prendere le richieste in arrivo per http://abc.example.com/... e riscrivere a http://example.com/abc/...Nginx convertire sottodominio al componente percorso senza reindirizzare

Questo è abbastanza facile da fare con un 301/302 reindirizzamento:

# rewrite via 301 Moved Permanently 
server { 
    listen 80; 
    server_name abc.example.com; 
    rewrite^$scheme://example.com/abc$request_uri permanent; 
} 

Il trucco è quello di fare questo cambio URL in modo trasparente al client quando abc.example.com e example.com punto alla stessa istanza Nginx.

In altre parole, Nginx può servire il contenuto da example.com/abc/... quando abc.example.com/... viene richiesta e senza un altro client di andata e ritorno?

Punto di partenza Config

Nginx config che compie l'operazione con un 301:

# abc.example.com 
server { 
    listen 80; 
    server_name abc.example.com; 
    rewrite^$scheme://example.com/abc$request_uri permanent; 
} 

# example.com 
server { 
    listen 80; 
    server_name example.com; 
    location/{ 
    # ... 
    } 
} 

risposta

30
# abc.example.com 
server { 
    listen 80; 
    server_name abc.example.com; 
    location/{ 
    proxy_pass http://127.0.0.1/abc$request_uri; 
    proxy_set_header Host example.com; 
    } 
} 
+2

Funziona fantastico avere Nginx procura a se stesso. Host modificato su 127.0.0.1 perché altrimenti Nginx deve risolvere il nome host (un intero problema separato). Aggiunto '$ request_uri' in modo che il percorso venga aggiunto alla richiesta proxy. –

+0

Funziona perfettamente. Stai attento alle risorse statiche che potrebbero richiedere 404. –

+1

@KJPrima qual è il problema con le risorse 404? –

Problemi correlati