Docker compose&;nginx网络主机名

Docker compose&;nginx网络主机名,docker,nginx,docker-compose,docker-networking,docker-network,Docker,Nginx,Docker Compose,Docker Networking,Docker Network,我有以下配置: nginx由docker compose文件作为反向代理//ssl端点启动 由不同的docker compose(出于模块化原因)文件启动的应用程序服务,该文件服务于应用程序 reverse\u proxy和app\u service通过app\u网络连接 由于它们是通过app\u网络连接的,因此我能够在nginx配置中处理app\u服务,如http://app_service:8080,这很好,因为我不需要公开应用程序服务本身的端口 不幸的是,nginx在我打开app服务容

我有以下配置:

  • nginx由docker compose文件作为反向代理//ssl端点启动
  • 由不同的docker compose(出于模块化原因)文件启动的应用程序服务,该文件服务于应用程序
  • reverse\u proxy
    app\u service
    通过
    app\u网络连接
由于它们是通过
app\u网络连接的
,因此我能够在nginx配置中处理
app\u服务
,如
http://app_service:8080
,这很好,因为我不需要公开应用程序服务本身的端口

不幸的是,nginx在我打开app服务容器之前不会启动,因为它会在启动时检查主机名
app\u服务的存在

如何防止nginx在启动时检查主机名,在
app\u服务
尚未运行的情况下尝试连接时可能导致网关错误

供参考的配置文件:

# 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
#应用程序服务docker-compose.yml
版本:“3”
服务:
app_服务:
重新启动:始终
容器名称:应用程序服务
图片:
网络:
违约:
外部:
名称:app_network
#nginx配置
服务器{
监听443sslhttp2;
听[:]:443sslhttp2;
服务器名称app.example.com;
地点/{
代理通行证http://app_service:8080;
包括proxy.conf;
}
ssl_证书/srv/ssl/.crt;
ssl\u证书\u密钥/srv/ssl/.key;
}

以下是一种适合我的方法:



    # 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;
    }

如果主机不可用并且在启动时未检查可用性,则会导致出现
502坏网关
消息

# 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;
}


    # 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;
    }