Sé que esta pregunta se hace varias veces y no está relacionada con aws.
2020/07/29 10:23:17 [error] 6#6: *37749 connect() failed (113: Host is unreachable) while connecting to upstream, client:Me enfrento a este problema mientras implementaba nginx en la nube de aws.
configuración de ubicación
location /test { proxy_pass http://test-service; proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }Sección aguas arriba como a continuación
upstream test-service { server test-service.internal:38102; keepalive 10; } Aquí test-service.internal es mi entrada de zona alojada de route53 y apunta a algún internal application load balancer de aws.
Cuando implemento/reinicio el servidor nginx, funciona bien, pero después de unos días (alrededor de dos o tres días) se bloqueará solo en el pase de proxy. Cuando cargo contenido html, funciona perfectamente, pero la llamada de pase de proxy se atasca.
¿Alguna solución sería útil?
Gracias.
Después de una larga depuración, descubrimos que nginx almacenará en caché test-service.internal internos. Y aws cambiará los ips del equilibrador de carga interno.
Por lo tanto, las direcciones IP en caché de nginx ya no existen. por lo que tenemos que proporcionar nuevos ips.
Solución:
nginx ha proporcionado una directiva de resolver
location /test { resolver 10.0.0.2 127.0.0.1 valid=30s; set $backend_servers test-service.internal; proxy_pass http://$backend_servers:38102; #proxy_pass http://test-service; proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Connection ""; }Hemos cambiado dos cosas.
Resolución añadida.
Eliminado aguas arriba (el resolvedor no es compatible con nginx. nginx-plus es compatible con upstream con resolvedor)
resolver 10.0.0.2 127.0.0.1 valid=30s; set $backend_servers test-service.internal; proxy_pass http://$backend_servers:38102; Ahora estamos usando aws dns server 10.0.0.2 para resolver test-service.internal después de cada 30 segundos