Tengo la siguiente configuración:
reverse_proxy
y app_service
están conectados a través de app_network
Dado que están conectados a través de app_network
, puedo dirigirme a app_service
en la configuración de nginx como http://app_service:8080
, lo cual es bueno porque no necesito exponer puertos en el servicio de aplicaciones en sí.
Desafortunadamente, nginx no se iniciará hasta que abra el contenedor del servicio de la aplicación porque verifica la existencia del servicio de la aplicación del nombre de app_service
al inicio.
¿Cómo puedo evitar que nginx verifique el nombre de host al inicio, lo que podría causar un error de puerta de Bad Gateway
incorrecta al intentar conectarme mientras app_service
aún no se está ejecutando?
Archivos de configuración para referencia:
# reverse proxy docker-compose.yml version: '3' services: reverse_proxy: restart: always container_name: reverse_proxy image: nginx ports: - 80:80 - 443:443 volumes: - /srv/docker/nginx/config:/etc/nginx - /srv/ssl:/srv/ssl networks: default: external: name: app_network
# application service docker-compose.yml version: '3' services: app_service: restart: always container_name: app_service image: <my_app_image> networks: default: external: name: app_network
# nginx config server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name app.example.com; location / { proxy_pass http://app_service:8080; include proxy.conf; } ssl_certificate /srv/ssl/<mycert>.crt; ssl_certificate_key /srv/ssl/<mykey>.key; }
Aquí hay una manera que funcionó para mí:
# nginx config server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name app.example.com; location / { set $upstream app_service:8080; proxy_pass $upstream; include proxy.conf; } ssl_certificate /srv/ssl/.crt; ssl_certificate_key /srv/ssl/.key; }
Esto da como resultado un mensaje 502 Bad Gateway
si el host no está disponible y no verifica la disponibilidad al inicio.