Динамическая перезагрузка nginx с нулевым временем простоя для развертывания сине-зеленого цвета

#nginx #blue-green-deployment

Вопрос:

В контексте сине-зеленого конвейера развертывания nginx-template.conf в настоящее время используется следующий файл шаблона:

 http {
    server {
        listen 8080;

        location / {
            proxy_pass http://0.0.0.0:{{ api_port }};
        }
    }
}
 

При развертывании новой версии API создается новая nginx.conf , заменяемая {{ api_port }} новым значением порта. Значения портов чередуются между 6000 и 6001 .

 6000  ---->  (deploy) 6001  ---->  (deploy) 6000  ---->  (deploy) 6001  ---->  ...
 

После создания нового nginx.conf файла старый nginx процесс останавливается и запускается новый:

 sudo nginx -s quit -c nginx-old.conf
sudo nginx -c nginx-new.conf
 

Это работает хорошо, но влечет за собой полсекундное время простоя, в течение которого новые запросы не могут быть обработаны.

В надежде устранить время простоя я попытался reload вместо этого использовать nginx:

 sudo nginx -s reload -c nginx-new.conf
 

Однако по какой-то причине это не применяет новую конфигурацию и nginx по-прежнему выполняется со старой конфигурацией, как если бы она не reload была выполнена.

  • есть ли способ перезагрузить nginx с учетом новой конфигурации без простоев?
  • в качестве альтернативы, можно ли достичь желаемого результата другим методом?