NGINX требует перезагрузки при сбросе службы - PullRequest
0 голосов
/ 19 февраля 2019

Мы используем NGINX в Docker Swarm, как обратный прокси.NGINX находится в оверлейной сети и передает внешние запросы в соответствующую службу роя.

Однако у нас есть проблема: каждый раз, когда мы перезапускаем / обновляем или иным образом отключаем службу роя, NGINX возвращает 502 Bad Gateway.Затем NGINX продолжает обслуживать 502 даже после перезапуска службы, и это не исправляется до тех пор, пока мы не перезапустим службу NGINX, которая, очевидно, не в состоянии полностью использовать балансировщик нагрузки и службы, работающие в нескольких местах.

Вот наш NGINX CONF:

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 даже не запустится!

Что мы делаем не так?

ОБНОВЛЕНИЕ Похоже, что мы хотимздесь невозможно (пожалуйста, докажите, что я не прав!).Кажется сумасшедшим упустить такую ​​возможность в мире докеров и микросервисов!

В настоящее время мы рассматриваем HAPROXY в качестве альтернативы, поскольку его можно настроить с помощью default-server init-addr none, чтобы остановить сбой при запуске.

...