2011-11-29 10 views
26

Può /etc/hosts essere utilizzato al posto di resolver quando si utilizza proxy_pass?Quando si utilizza proxy_pass, è possibile utilizzare/etc/hosts per risolvere i nomi di dominio anziché "resolver"?

Devo eseguire un proxy_pass sulla stessa macchina nginx. C'è un modo per risolvere i domini usando il file/etc/hosts della macchina invece di specificare un server DNS attraverso la proprietà "resolver"?

Questo mi salverà l'hop aggiuntivo necessario per raggiungere lo stesso server. Ho provato a configurare l'IP interno mappato al DNS nel file/etc/hosts, ma nginx sta ancora leggendo dal server DNS impostato nella proprietà resolver. O c'è un modo per fare in modo che il modulo HTTPProxy consideri le impostazioni del file/etc/hosts?

Grazie per qualsiasi consiglio si potrebbe condividere ..

È la stessa domanda che ho postato nel forum nginx: http://forum.nginx.org/read.php?11,218997

+0

La cosa strana, questo funziona se si utilizza upstream (risoluzione host) –

risposta

39

È possibile aggirare il problema installando dnsmasq e impostare il tuo resolver a 127.0.0.1. Fondamentalmente questo usa il tuo DNS locale come risolutore, ma risolve solo ciò che sa (tra le cose è il tuo /etc/hosts) e inoltra il resto al tuo DNS predefinito.

+0

Mi chiedo perché questo non è contrassegnato come la risposta corretta –

+5

Ma purtroppo 'dnsmasq' non rileva automaticamente le modifiche nel file' hosts'. Devi inviare 'HUP'. – Mitar

3

Una soluzione alternativa consiste nell'utilizzare la mappa Nginx per copiare il contenuto di /etc/hosts.

map $wanted_host $wanted_host_ip 
{ 
    default 127.0.0.1; 
    b.dev.local X.X.X.X; 
    a.dev.local X.X.X.X; 
} 

server 
{ 
    listen    80; 
    server_name   ~^(?P<wanted_port>[0-9]+?)-(?P<wanted_host>.+?)\.HOSTNAME$; 

    location/
    { 
     proxy_pass http://$wanted_host_ip:$wanted_port; 

    } 
} 

Ciò mappare wanted_host-wanted_host_ip, come un risolutore.

Problemi correlati