Saltar al contenido

Dirección de resolución de Nginx de /etc/resolv.conf

Solución:

Solución 1:

Desafortunadamente, no hay una manera fácil de hacer esto porque nginx usa su propia implementación de resolución. Las dos soluciones que veo son:

1) Genera la lista de resolución de un script y la incluye, por ejemplo:

echo resolver $(awk 'BEGIN{ORS=" "} $1=="nameserver" {print $2}' /etc/resolv.conf) ";" > /etc/nginx/resolvers.conf

http {

    include resolvers.conf;

}

2) Vuelve a compilar nginx con un módulo de terceros como el módulo perl (muy) experimental y escribe un controlador de variables:

http {

    perl_modules perl/lib;
    perl_set $resolvers '

        sub {
            return system("awk BEGIN{ORS=" "} /nameserver/{print $2}" /etc/resolv.conf");
        };

    resolver "$resolvers";
}

Ahora, si eres un gran codificador de C (prepara tus ojos para un poco de sangre), aún puedes escribir un parche o módulo alternativo para que funcione de esta manera.

Solucion 2:

Si está utilizando la versión Openresty de nginx, puede utilizar su especial local argumento a la resolver directiva que cuando se establece en local=on, significa la ruta estándar de /etc/resolv.conf será utilizado por el resolutor (para obtener más detalles, consulte los documentos del resolutor de Openresty):

resolver local=on;

Solución 3:

Para los usuarios de Docker, la solución se encuentra aquí:

Aquí hay una solución para las personas que usan Docker.

export NAMESERVER=`cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}' | tr 'n' ' '`

Lo que esto hace es tomar todas las nameserver entradas de
/etc/resolv.conf e imprimirlos en una línea, para que pueda usarlos con nginx’s resolver directiva. Su Dockerfile deberá tener un script personalizado para el punto de entrada que genera el archivo de configuración y luego inicia nginx. Digamos que tiene un archivo llamado
nginx.conf.template que se parece a algo como:

...snip...
http {
  server {

    resolver $NAMESERVER valid=10s;

    ...snip....  
    }
  }
}

Su secuencia de comandos de inicio puede usar el envsubst programa para generar un nginx.conf y luego inicie nginx. p.ej:

#!/bin/bash
if [ "$NAMESERVER" == "" ]; then
    export NAMESERVER=`cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}' | tr 'n' ' '`
fi

echo "Nameserver is: $NAMESERVER"

echo "Copying nginx config"
envsubst '$NAMESERVER' < /nginx.conf.template > /nginx.conf

echo "Using nginx config:"
cat /nginx.conf

echo "Starting nginx"
nginx -c /nginx.conf -g "daemon off;"

TENGA EN CUENTA que en la ventana acoplable esto tiende a dar como resultado el mismo archivo, ya que, de forma predeterminada, el servidor DNS integrado de la ventana acoplable es 127.0.0.11, consulte esta respuesta a Docker Network Nginx Resolver.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *