Página de manutenção no nginx, práticas recomendadas

13

Desejo configurar o servidor para mostrar uma página de manutenção quando ela existir. Eu tentei este código e funciona:

location / {
    try_files /maintenance.html $uri $uri/ @codeigniter;
}

Mas notei que seria servido com um código de status 200 e pode causar confusão nos mecanismos de pesquisa. Eu acho que a melhor prática seria retornar um código de status 503. No google, encontro várias páginas relevantes sobre o assunto, como esta . No entanto, eles usam if para fazer o redirecionamento e, de acordo com a documentação do nginx, não é seguro usar ifs.

Existe uma maneira de fazer isso sem usar if? É seguro usar neste caso?

Obrigado.

NeDark
fonte

Respostas:

7

Eu acho que a melhor prática seria retornar um código de status 500.

Eu acho que você quer dizer 503 em vez de 500.

eles usam ifpara fazer o redirecionamento e, de acordo com a documentação do nginx, não é seguro usar o ifs.

Não. Somente returné 100% seguro por dentro ifno locationcontexto.

De acordo com a documentação do nginx , você pode especificar um código de status HTTP como o último argumento para try_files. Eu tentei isso, mas não funcionou.

quanta
fonte
21

Aqui está o que eu faço.

            if (-f $document_root/maintenance.html) {
                    return 503;
            }
            error_page 503 @maintenance;
            location @maintenance {
                    rewrite ^(.*)$ /maintenance.html break;
            }

Se o arquivo estiver lá, será exibida a página de manutenção. Depois de remover o arquivo, você voltará ao normal.

Mike
fonte
1
Sim, esse é o mesmo código que está no link da pergunta. Na verdade, estou perguntando se é seguro usar ifs nesse caso, pois não deve ser usado de acordo com a documentação .
NeDark
1
E a mesma documentação: In some cases it's also possible to move ifs to server level (where it's safe as only other rewrite module directives are allowed within it).a página de erro de manutenção mostrada por Mike normalmente é definida no contexto do servidor {}.
Regan
1
Fiz o mesmo, exceto que fiz um 'retorno 503' sem verificar a existência do arquivo. Dessa forma, eu posso apenas ativar / desativar o site (usando o layout "sites disponíveis" / "sites ativados" do Debian) através do link simbólico e ativar a página de manutenção.
Asfand Qazi 14/07/2015
1
Parece que este seria um acerto de desempenho: NGINX terá de verificar a existência de um arquivo para cada pedido ...
Marc
1
Marc, não é porque os arquivos comumente acessados ​​são armazenados no cache do sistema de arquivos que está na memória.
1937 Mike