Configurar NGINX para usar páginas de errores personalizadas.

En este breve tutorial voy a explicar como resolver una necesidad bastante común cuando se está configurando un servidor web:  crear páginas personalizadas para los errores, tanto para los 400s como para los 500s.

Sé que es algo de lo más común y solía hacerlo cuando usaba apache pero ahora que necesité hacerlo en NGINX en un servidor con Linux, sí encontré algunos detalles que me gustaría documentar.

Empezaré por los detalles que me motivaron a hacer este tutorial; la creación de los archivos y la ruta dónde deben ir almacenados.

Primero, es crear un archivo que llamaremos 500.html, este lo estoy creando en mi home dentro de la aplicación:

/home/user/webapp/500.html

Es un archivo sencillo que solo mostrará el error con una imagen y el logo de la empresa.

Este archivo, en algunos sitios o foros se menciona que se almacene en la raíz de la aplicación web o del hosting o que se use la ruta absoluta en la configuración y precisamente esa ambigüedad fue la que hizo que me tomara más tiempo realizar la configuración.

En realidad, ese archivo debe residir en /usr/share/nginx/html/ para ser visto desde la configuración default de nuestro servidor, pero como quizá se estén haciendo cambios de esa página de error, lo ideal fue dejarla cerca de la raíz de mi webapp y solo crear un “link” para que la vea el nginx en la ruta esperada y eso lo hice de la siguiente manera:

ln /home/user/webapp/500.html /usr/share/nginx/html/500.html

Lo siguiente es modificar nuestro archivo de configuración:

/etc/nginx/sites-enabled/default

Y ahí, agremos lo siguiente:

error_page 502 /500.html;
location /500.html{
}

En mi configuración, tengo todo redireccionado a https, entonces las lineas anteriores van dentro de la sección de server como se observa a continuación:

 

Una vez modificado ese archivo, solo resta validar que esté bien la modificación y reiniciar el nginx y listo.

Para verificar que todo esté bien se utilizar sudo nginx -t y nos arroja lo siguiente:

user@lap:~# sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Y solo resta reiniciarlo:

sudo service nginx restart

Con eso, ya tenemos configurado nuestro servidor para mandar páginas de errores personalizadas.

Solo como comentario adicional, en la documentación  de nginx se permite redireccionar directamente a una URL pero esto en mi ambiente de desarrollo complicaba algunas cosas dado que la plataforma está con node.js y esto requería un poco más de configuración a nivel de desarrollo.