Servir mensajes de error de aplicaciones web desde el servidor Http

Servir mensajes de error de aplicaciones web desde el servidor Http

Tengo nginx como servidor http con tomcat como backend (usando proxy_pass). Funciona muy bien, pero quiero definir mis propias páginas de error (404, 500, etc.) y que sean atendidas por nginx y no por tomcat. Por ejemplo tengo el siguiente recurso:

https://domain.com/resource

que no existe. Si [OBTENGO] esa URL, recibo un mensaje No encontrado de Tomcat y no de nginx.

Lo que quiero es que cada vez que Tomcat responda con un 404 (o cualquier otro mensaje de error) nginx se envíe un mensaje al usuario: algún archivo html accesible por nginx.

La forma en que tengo configurado mi servidor nginx es muy fácil, solo:

location / {
    proxy_pass   http://localhost:8080/<webapp-name>/;
}

Y configuré el puerto 8080, que es Tomcat, como no accesible desde fuera de esta máquina.

No creo que locationfuncione usar diferentes directivas en la configuración de nginx, porque hay algunos recursos que dependen de la URL:

https://domain.com/customer/<non-existent-customer-name>/[GET]

Siempre devolverá 404 (o cualquier otro mensaje de error), mientras que:

https://domain.com/customer/<existent-customer>/[GET]

Devolverá cualquier cosa diferente a 404 (el cliente existe).

¿Hay alguna forma de enviar mensajes de error de Tomcat (servidor de aplicaciones) con Nginx (servidor http)? ¿Verificar el mensaje enviado por la proxy_passdirectiva y actuar en consecuencia?

Respuesta1

Bien, lo encontré. En la serversección de configuración del sitio nginx estoy usando:

error_page 404 /404.html;
location = /404.html {
    root /var/www/nginx;
}

location / {
    proxy_pass http://localhost:8080/api/;
    proxy_intercept_errors on;
}

Necesitas agregar proxy_intercept_errors onpara nginx ainterceptarlos. Nginx solo interceptará los errores que hayas definido con error_page.

información relacionada