Я ищу решение для автоматизации процесса развертывания одного из наших приложений. В начале развертывания я хотел бы программно установить указанный сервер в режим обслуживания и, наконец, после завершения развертывания удалить флаг режима обслуживания с сервера nginx.
Под режимом обслуживания я подразумеваю, что nginx должен отвечать HTTP-кодом ответа 503 на все запросы (с возможной настраиваемой страницей).
Я знаю, как настроить серверный блок на ответ кодом 503 (см. http://www.cyberciti.biz/faq/custom-nginx-main maintenance-page-with-http503/), но вопрос в том, как это сделать программно и максимально эффективно.
На ум пришли два варианта:
Опция 1: В начале процесса развертывания запишите файл обслуживания в корень документа и условно проверьте наличие файла обслуживания в конфигурации сервера nginx:
server {
if (-f $document_root/in_maintenance_mode) {
return 503;
}
}
Этот метод содержит определенные накладные расходы, так как наличие файла проверяется для каждого запроса. Можно ли проверить наличие файла только при загрузке конфига nginx?
Вариант 2: Сценарий развертывания заменяет весь файл конфигурации сервера nginx на версию для обслуживания и меняет его обратно в конце развертывания. Если используется этот метод, меня беспокоят другие возможные процессы автоматизации, такие как марионетка, которые могут переопределить файл конфигурации обслуживания.
Вариант 1 - лучший выбор. Если вас беспокоит дополнительный запрос файла (хотя накладных расходов в нем почти нет), вы можете заменить его на проверку переменных:
set $maintenance "on";
if ($maintenance = "on") {
return 503;
}
Я делаю вот что:
используйте следующий фрагмент:
...
error_page 502 503 /_maintenance/index.html;
location ^~ /_maintenance {
alias some/place/on/your/disk/static/_maintenance;
}
...