NGINX需要在服务重置时重新启动

NGINX需要在服务重置时重新启动,nginx,docker-swarm,Nginx,Docker Swarm,我们在docker swarm中使用NGINX作为反向代理。NGINX位于覆盖网络内,将外部请求转发给相关swarm服务 然而,我们有一个问题,每次我们重新启动/更新或关闭swarm服务时,NGINX都会返回502坏网关。然后,即使在服务重新启动后,NGINX仍继续为502服务,直到我们重新启动NGINX服务,这一点才得到纠正,这显然违背了在多个位置运行负载平衡器和服务的全部意义 这是我们的NGINX配置: events {} http { fastcgi_buffers 16 16k;

我们在docker swarm中使用NGINX作为反向代理。NGINX位于覆盖网络内,将外部请求转发给相关swarm服务

然而,我们有一个问题,每次我们重新启动/更新或关闭swarm服务时,NGINX都会返回
502坏网关
。然后,即使在服务重新启动后,NGINX仍继续为
502
服务,直到我们重新启动NGINX服务,这一点才得到纠正,这显然违背了在多个位置运行负载平衡器和服务的全部意义

这是我们的NGINX配置:

events {}
http {
  fastcgi_buffers 16 16k;
  fastcgi_buffer_size 32k;
  client_max_body_size 20M;

  large_client_header_buffers 8 256k;
  client_header_buffer_size 256k;

  proxy_buffer_size          128k;
  proxy_buffers              4 256k;
  proxy_busy_buffers_size    256k;

  map $host $client {
     default clientname;
  }

  #Healthcheck
  server {
    listen 443;
    listen 444;
    location /is-healthy {
      access_log off;
      return 200;
    }
  }

 #Example service:
  server {
     listen 443;
     server_name scheduler.clientname.com;

     location / {
        resolver 127.0.0.11 ipv6=off;
        proxy_pass http://$client-scheduler:60911;
        proxy_http_version 1.1;

        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
     }
  }

  #catchll 
  server {
     listen 443;
     listen 444;
     server_name _;

     location / {     
         return 404 'Page not found';
     }
  }
}
我们使用$client占位符,否则当其中一个服务关闭时,我们甚至无法启动nginx

另一种选择是使用具有健康检查的上游指令,这可以很好地工作。问题是,如果任何服务不可用,NGINX甚至无法启动

我们做错了什么

更新 看来我们想要的是不可能的(尽管请证明我错了!)。在docker和micro services的世界中,错过这样一个功能似乎很疯狂


我们目前正在寻找HAPROXY作为替代方案,因为这可以通过
默认服务器init addr none
来设置,以在启动时停止故障。

以下是我的操作方法,创建一个max_fails=0的上游

    upstream docker-api {
        server docker.api:80 max_fails=0;
    }


    # load configs
    server {
        listen 80;
        listen [::]:80;

        server_name localhost;

        location /api {
            proxy_pass http://docker-api;
            proxy_http_version  1.1;
            proxy_cache_bypass  $http_upgrade;

            # Others config...
        }

    }

同样的问题:重新启动微服务后,Nginx无法连接到网关。Microservice和Nginx都已对接。是的,我们从未找到解决方案。我们现在有了一个每次微服务重新启动时重新启动nginx的过程,这有点违背了整个要点。出于这个原因,我们正在迁移到HA代理。您能分享您的swarm配置吗?