
Aquí hay un fragmento de mi configuración de nginx:
server {
error_page 500 /errors/500.html;
}
Cuando provoco un 500 en mi aplicación, Chrome simplemente muestra su página 500 predeterminada (Firefox y Safari muestran una página en blanco) en lugar de mi página de error personalizada.
Sé que el archivo existe porque puedo visitarlo http://server/errors/500.html
y ver la página. También puedo mover el archivo a la raíz del documento y cambiar la configuración a esto:
server {
error_page 500 /500.html;
}
y nginx sirve la página correctamente, por lo que no parece que haya algo más mal configurado en el servidor.
También lo intenté:
server {
error_page 500 $document_root/errors/500.html;
}
y:
server {
error_page 500 http://$http_host/errors/500.html;
}
y:
server {
error_page 500 /500.html;
location = /500.html {
root /path/to/errors/;
}
}
sin suerte.
¿Es este el comportamiento esperado? ¿Tienen que existir páginas de error en la raíz del documento o me falta algo obvio?
Actualización 1:Esto también falla:
server {
error_page 500 /foo.html;
}
cuando foo.html
efectivamente existe en la raíz del documento. Casi parece que algo más está sobrescribiendo mi configuración, pero este bloque es el único lugar que /etc/nginx/*
hace referencia a la error_page
directiva.
¿Existe algún otro lugar que pueda establecer la configuración de nginx?
Respuesta1
Intenta agregar
proxy_intercept_errors on;
o
fastcgi_intercept_errors on;
en el bloque del servidor dependiendo de su configuración.
Este tipo de configuración funciona bien:
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/static/pages;
}
Respuesta2
prueba esto:
servidor { página_error 500 =200 /errors/500.html; }
esto debería enviar el estado http 200 para que el navegador muestre su página. Con el estado predeterminado (que es 500), el navegador probablemente muestre su propia página de error e ignore su contenido, incluso si lo envía el servidor.
Saludos, Adán