O nginx não exibirá uma página de erro em um subdiretório da raiz do documento

O nginx não exibirá uma página de erro em um subdiretório da raiz do documento

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.htmle 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.htmlrealmente 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_pagediretiva.

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

informação relacionada