letsencrypt - nginx proxy_pass a un contenedor de acoplador vinculado
proxy_pass docker (3)
Debería echar un vistazo a esta respuesta sobre el uso de / etc / hosts como su resolver: Usar / etc / hosts como resolver para la reescritura de URL
Básicamente, su DNS o resolver no usa / etc / hosts para resolver nombres durante una búsqueda, pero puede solucionar esto instalando dnsmasq
y usando 127.0.0.1
como su resolver. Puede agregar 127.0.0.1 como resolver directamente en su configuración de nginx:
server {
location ~ ^/some_url/(.*)$ {
resolver 127.0.0.1;
proxy_pass http://container1/$1;
}
}
Tengo dos contenedores Docker con nginx. container1 está vinculado a container2. Docker luego agrega una entrada a / etc / hosts que ingresé en la configuración de nginx de la siguiente manera:
server {
location ~ ^/some_url/(.*)$ {
proxy_pass http://container1/$1;
}
}
Puedo hacer ping a container1 desde container2 , pero nginx no puede resolverlo:
* 1 no se definió una resolución para resolver container1
¿Cómo puedo proxy_pass una solicitud a otro contenedor acoplador?
Puede usar el servicio DNS incorporado de Docker, si está habilitado, verifique su solucionador de contenedor:
cat /etc/resolv.conf
Debiera ser:
nameserver 127.0.0.11
Use esta IP como resolver:
server {
location ~ ^/some_url/(.*)$ {
resolver 127.0.0.11;
proxy_pass http://container1/$1;
} }
Use un bloque de flujo ascendente en lugar del nombre del contenedor directamente
upstream backend {
server container1;
}
server {
location ~ ^/some_url/(.*)$ {
proxy_pass http://backend/$1;
}
}
Esto debería permitir que se produzca la resolución normal del nombre, proporcionando una forma de usar fácilmente los enlaces del acoplador con nginx.