Estoy ejecutando docker-nginx en el servidor ECS. Mi servicio nginx se detuvo repentinamente porque el proxy_pass de uno de los servidores se volvió inalcanzable. El error es el siguiente:
[emerg] 1#1: host not found in upstream "dev-example.io" in /etc/nginx/conf.d/default.conf:988Mi archivo de configuración es el siguiente:
server { listen 80; server_name test.com; location / { proxy_pass http://dev-exapmle.io:5016/; proxy_redirect off; ##proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } server { listen 80 default_server; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }Tengo muchos servidores en el archivo de configuración, incluso si un servidor no funciona, necesito ejecutar nginx. Hay alguna manera de arreglarlo?
Cualquier sugerencia para solucionar este problema sería apreciada.
Solo agregar un solucionador no resolvió el problema en mi caso. Pero pude solucionarlo usando una variable para el host. Además, supongo que tiene más sentido usar el DNS de Docker en 127.0.0.11 (esta es una IP fija).
Ejemplo:
server { listen 80; server_name test.com; location / { resolver 127.0.0.11; set $example dev-example.io:5016; proxy_pass http://$example; } }Encontré la solución variable en esta página .
Incluya para evitar que Nginx se bloquee si su sitio no funciona, incluya una directiva de resolución, de la siguiente manera:
server { listen 80; server_name test.com; location / { resolver 8.8.8.8; proxy_pass http://dev-exapmle.io:5016/; proxy_redirect off; ...¡ADVERTENCIA! El uso de un DNS público crea un riesgo de seguridad en su backend, ya que sus solicitudes de DNS pueden ser falsificadas. Si esto es un problema, debe apuntar la resolución a un servidor DNS seguro.
Esto generalmente significa que el nombre dns que proporcionó como servidor ascendente no se puede resolver. Para probarlo, inicie sesión en el servidor nginx e intente hacer ping al servidor ascendente proporcionado y vea si la resolución de nombres se completa correctamente. Si es un contenedor docker, intente docker exec -it para obtener un shell, luego intente hacer ping en el flujo ascendente para probar la resolución de nombres. Si el contenedor se detiene, intente usar la dirección IP en lugar del nombre dns en su bloque de servidor.
proxy_pass http://<IP ADDRESS>:5016/;También puede usar la directiva de resolución si desea usar un servidor dns diferente para esta ubicación que el sistema host:
resolver 8.8.8.8;