nginx no mostrará una página de error en un subdirectorio de la raíz del documento

nginx no mostrará una página de error en un subdirectorio de la raíz del documento

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.htmly 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.htmlefectivamente 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_pagedirectiva.

¿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

información relacionada