#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 с учетом новой конфигурации без простоев?
- в качестве альтернативы, можно ли достичь желаемого результата другим методом?