nginx não exibirá uma error_page em um subdiretório da raiz do documento

4

Aqui está um trecho da minha configuração nginx:

server {
    error_page 500 /errors/500.html;
}

Quando eu faço um 500 no meu aplicativo, o Chrome mostra apenas sua página padrão de 500 (o Firefox e o Safari mostram uma página em branco) em vez da minha página de erro personalizada.

Eu sei que o arquivo existe porque posso visitar http://server/errors/500.html e vejo a página. Também posso mover o arquivo para a raiz do documento e alterar a configuração para isso:

server {
    error_page 500 /500.html;
}

e o nginx veicula a página corretamente, por isso não parece algo diferente configurado incorretamente no servidor.

Eu também tentei:

server {
    error_page 500 $document_root/errors/500.html;
}

e:

server {
    error_page 500 http://$http_host/errors/500.html;
}

e:

server {
   error_page 500 /500.html;
   location = /500.html {
       root /path/to/errors/;
   }
}

sem sorte.

Esse comportamento é esperado? As páginas de erro precisam existir na raiz do documento ou estou faltando algo óbvio?

Atualização 1: Isso também falha:

server {
    error_page 500 /foo.html;
}

quando foo.html realmente existe na raiz do documento. Quase parece que alguma coisa está sobrescrevendo minha configuração, mas esse bloco é o único lugar em qualquer lugar em /etc/nginx/* que faz referência à diretiva error_page .

Existe algum outro lugar que possa definir a configuração do nginx?

    
por Brandan 18.10.2012 / 18:08

2 respostas

5

Tente adicionar

proxy_intercept_errors on;

ou

fastcgi_intercept_errors on;

no bloco do servidor, dependendo da sua configuração.

Este tipo de configuração está funcionando bem:

  error_page   500 502 503 504  /500.html;
    location = /500.html {
        root   /home/static/pages;
    }
    
por 18.10.2012 / 18:26
0

tente isto:

servidor {     error_page 500 = 200 /errors/500.html; }

isso deve enviar o status HTTP 200 para que o navegador exiba sua página. Com o status padrão (que é 500), o navegador provavelmente mostra sua própria página de erro e ignora seu conteúdo, mesmo que seja enviado por servidor.

Atenciosamente, Adam

    
por 30.01.2013 / 11:40