
Aqui está um trecho da minha configuração do nginx:
server {
error_page 500 /errors/500.html;
}
Quando causo 500 em meu aplicativo, o Chrome mostra apenas sua página 500 padrão (o Firefox e o Safari mostram uma página em branco) em vez de minha página de erro personalizada.
Sei que o arquivo existe porque posso visitá-lo 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 isto:
server {
error_page 500 /500.html;
}
e o nginx exibe a página corretamente, então não parece que haja algo mal configurado 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 é o 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 algo mais está substituindo minha configuração, mas este bloco é o único lugar em qualquer lugar /etc/nginx/*
que faz referência à error_page
diretiva.
Existe algum outro lugar que possa definir a configuração do nginx?
Responder1
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;
}
Responder2
tente isto:
servidor { página_de_erro 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 pelo servidor.
Atenciosamente, Adão