2011-11-29 9 views
26

Can /etc/hosts se puede utilizar en lugar de resolver al utilizar proxy_pass?Al usar proxy_pass, ¿se puede usar/etc/hosts para resolver nombres de dominio en lugar de "resolver"?

Necesito realizar un proxy_pass a la misma máquina nginx. ¿Hay alguna manera de resolver los dominios utilizando el archivo/etc/hosts de la máquina en lugar de especificar un servidor DNS a través de la propiedad "resolver"?

Esto me ahorrará los saltos adicionales necesarios para llegar al mismo servidor. He intentado configurar la IP interna asignada al DNS en el archivo/etc/hosts, pero nginx sigue leyendo desde el servidor DNS configurado en la propiedad resolutor. ¿O hay una manera de hacer que el módulo HTTPProxy considere la configuración del archivo/etc/hosts?

Gracias por cualquier consejo que usted podría compartir ..

Ésta es la misma pregunta que he publicado en el foro nginx: http://forum.nginx.org/read.php?11,218997

+0

Lo extraño, esto está funcionando si usas upstream (resolución de host) –

Respuesta

39

Usted puede evitar esto mediante la instalación de dnsmasq y el establecimiento de su resolución a 127.0.0.1. Básicamente, esto utiliza su DNS local como un resolver, pero solo resuelve lo que sabe (entre esas cosas está su /etc/hosts) y reenvía el resto a su DNS predeterminado.

+0

Me pregunto por qué esto no está marcado como la respuesta correcta –

+5

Pero lamentablemente 'dnsmasq' no detecta automáticamente los cambios en el archivo' hosts'. Tienes que enviar 'HUP'. – Mitar

3

Una solución consiste en utilizar el mapa de Nginx, para copiar el contenido /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; 

    } 
} 

Esto asociará wanted_host-wanted_host_ip, como un dispositivo de resolución.

Cuestiones relacionadas