Estoy usando Docker Swarm. Coloqué un contenedor nginx frente a mi API con fines de almacenamiento en caché. Dado que cada vez que implemento mi API, crea una nueva IP interna, estoy usando el nombre de mi servicio tasks.api según la documentación del enjambre. A continuación se muestra mi bloque de ubicación
proxy_cache_path /var/cache/nginx/ta_api levels=1:2 keys_zone=api_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name localhost; location / { proxy_pass http://tasks.api:10010; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_buffering on; proxy_cache api_cache; proxy_cache_bypass $http_upgrade; # Add header to see if response was cached add_header X-Cache-Status $upstream_cache_status; # Allow one cache-update request at a time sent to an origin server. proxy_cache_lock on; # Permit revalidation of stale cached responses. proxy_cache_revalidate on; # proxy_cache_valid 200 1d; # Delivering Cached Content When the Origin is Down proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; # Do all updates in background. With proxy_cache_use_stale, allows stale # cached responses to be served. proxy_cache_background_update on; } } También agregué resolver 127.0.0.11 ipv6=off valid=15s; a mi bloque http. Sin embargo, cuando vuelvo a implementar mi API y obtiene una nueva API, nginx aún intenta enviar a la IP anterior.
Estoy ejecutando una etiqueta de contenedor nginx:1.15.12-alpine cuando instalo herramientas de enlace en el contenedor nginx. Puedo ver que estoy obteniendo las nuevas IP usando dig tasks.api
No sé qué probar a continuación. Puedo codificar direcciones IP privadas, pero esa no es la forma de la ventana acoplable ...
NGINX solo realizará búsquedas de DNS al inicio y almacenará en caché para siempre para nombres de host fijos . Para habilitar la búsqueda de DNS durante el tiempo de ejecución, debe cambiar el nombre de host fijo a una variable dinámica. Entonces, en el caso OP, cambie la línea proxy_pass original a:
set $target_host tasks.api ; proxy_pass http://$target_host:10010;