Código de status personalizado para a página padrão do Nginx

4

Eu só tenho experiência com upstreams no Nginx, não na veiculação de arquivos estáticos.

O Nginx tem um servidor padrão que serve uma página Bem-vindo ao nginx! e aparece quando não há correspondência nos hosts virtuais. Gostaria de manter essa página padrão, mas substituir o código de status 200 por 404 .

Não tenho certeza de como fazer isso. Alguma idéia?

    
por Niels B. 08.06.2016 / 17:32

1 resposta

2

Você pode retornar uma página com um código de erro usando

error_page 404 /index.html;

Contanto que root seja definido em seu bloco de servidores como o caminho padrão do nginx. Nginx.org tem extensa documentação sobre tudo isso, o que vale a pena conferir.

Reescrevendo 200

É perigoso. No entanto, você pode usar return para responder com solicitações para qualquer outro lugar em seu servidor, que invocará a diretiva error_page corretamente. Se você colocar isso na parte inferior do seu bloco de servidor, ele servirá como um pega-tudo para solicitações não especificadas em outro lugar:

location / {
    return 404;
}

Aqui estão os documentos para return .

Para ser realmente pedante, você também pode deixar de fora a diretiva error_page e apenas gravar o URL de redirecionamento (para os códigos 301, 302, 303, 307 e 308 a partir da versão 0.8.42):

location / { 
    root /path/to/www/nginx;
    return 301 /index.html;
}

Ou o texto do corpo da resposta (para outros códigos):

location / { 
    root /path/to/www/nginx;
    return 404 '404 error';
}

... mas isso pode ser difícil de solucionar se algo der errado.

Um pouco de elaboração

O Nginx possui uma sintaxe bastante fácil para separar os códigos de status e as páginas. Em um bloco server , você pode definir um root , em que o nginx procurará as páginas estáticas solicitadas. Quando uma página estática é solicitada e não encontrada, ou não pode ser lida, ou algo mais acontece, o nginx obtém um código de status e executa uma ação. Se esse código for 200, ele processa o html, php ou qualquer outro, que pode (e geralmente faz) disparar uma série de solicitações para o sistema de arquivos ou algum outro soquete, para fornecer essa ou aquela parte de sua página. Os resultados de sucesso são enviados para o cliente de navegação e, na falha, a página padrão do erro é retornada. Em ambos os casos, o código de status também é retornado (permitindo a personalização do 404 no navegador e outros erros).

A diretiva error_page apenas informa ao nginx qual solicitação seguir em seguida. Na prática, essa solicitação nem precisa ser um arquivo no disco. Pode ser um nome location com seu próprio conjunto de regras. A configuração padrão do nginx ilustra isso muito bem:

error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /usr/share/nginx/www;
}

Portanto, ao obter um 503, o nginx solicitará o /50x.html e a declaração de localização de qualquer solicitação para 50x.html definirá o caminho da raiz para procurar por esse arquivo.

    
por 09.06.2016 / 00:05

Tags