Como definir apenas o bloco do servidor nginx específico no modo de manutenção programaticamente

7

Estou procurando uma solução para automatizar um dos processos de implantação de nosso aplicativo. No início da implantação, gostaria de definir programaticamente o servidor especificado no modo de manutenção e, finalmente, após a conclusão da implantação, remover o sinalizador de modo de manutenção do servidor nginx.

Por modo de manutenção, quero dizer que o nginx deve responder com o código de resposta HTTP 503 a todas as solicitações (com possível página personalizada).

Eu sei como definir o bloco de servidor para responder com código 503 (consulte link , mas a questão é sobre como fazer isso de maneira programática e mais eficiente.

Duas opções vieram à minha mente:

Opção 1: No início do processo de implantação, grave um arquivo de manutenção na raiz do documento e verifique condicionalmente a existência do arquivo de manutenção na configuração do servidor nginx:

server {
    if (-f $document_root/in_maintenance_mode) {
        return 503;
    }
}

Esse método contém certa sobrecarga, pois a existência do arquivo é verificada para cada solicitação. É possível verificar a existência do arquivo somente ao carregar a configuração do nginx?

Opção 2: O script de implantação substitui todo o arquivo de configuração do servidor nginx por uma versão de manutenção e o troca de volta no final da implantação. Se esse método for usado, estou preocupado com possíveis outros processos de automação, como o fantoche, que podem substituir o arquivo de configuração de manutenção.

    
por Ville Mattila 16.11.2012 / 14:13

2 respostas

3

A opção 1 é a melhor escolha. Se a solicitação de arquivo adicional incomodar você (embora não haja quase nenhuma sobrecarga nela), você poderá substituí-la por verificação de variável:

set $maintenance "on";
if ($maintenance = "on") {
    return 503;
}
    
por 21.11.2012 / 11:34
0

Algo que faço é isto:

  • não usa um switch explícito, mas tem o haproxy (ou verniz) como o próximo componente upstream
  • desativar o próximo componente ou movê-lo para uma porta separada
  • use o seguinte snippet:

    ...
    error_page 502 503 /_maintenance/index.html;
    location ^~ /_maintenance {
        alias some/place/on/your/disk/static/_maintenance;
    }
    ...
    
por 06.12.2012 / 20:07