2014-12-25 17 views
5

Ci sono alcune domande simili su SO, ma nessuna identica alla mia, e non ho avuto fortuna nel tentativo di adattare le loro risposte finora.Nginx URL masking su un dominio diverso

Desidero mappare l'URL http://sub.example.com a https://123.12.12.12/path, in modo che il browser mostri ancora l'URL http://sub.example.com.

file di configurazione mio Nginx sembra,

server { 
    listen 80; 
    server_name sub.example.com; 

    location/{ 
     proxy_pass https://123.12.12.12; 
     rewrite ^/$ /path last; 
    } 
} 

L'instradamento lavora qui, ma l'URL visualizzato è http://sub.example.com/path. Come faccio a visualizzarlo solo http://sub.example.com?

+0

Vieni reindirizzato a 'http: // sub.esempio.com/percorso'? –

+0

Sì, come faccio a renderlo 'http: // sub.example.com'? – kennysong

+0

È necessario eliminare il reindirizzamento –

risposta

18
server { 
    listen 80; 
    server_name sub.example.com; 

    location/{ 
     proxy_pass https://123.12.12.12/path; 
    } 
} 

Ecco come funziona. Se proxy_pass contiene posizioni, la posizione corrente verrà sostituita con quella specificata. http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

Ma è di aiuto solo per richieste HTTP e reindirizzamenti http. Se l'applicazione crea html con i link https://123.12.12.12 - è ancora invariato. In questo caso puoi provare ngx_http_sub_module.

+0

Cosa succede se voglio passare l'intestazione HOST al back-end e non esiste un nome DNS per l'host di backend? È possibile anche quello? – VsMaX

+0

@VsMaX puoi usare 'proxy_set_header Host somevalue.com;' oppure, se hai bisogno di passare l'host di frontend, passa $ host variabile 'proxy_set_header Host $ host;' –

+0

il problema è che quando imposto 'proxy_set_header Host somevalue.com; 'Ancora esegue la query DNS per quel nome host, che non esiste. E poi nginx fallisce con erorr nome DNS non trovato ... – VsMaX