Передача сообщений об ошибках веб-приложений с HTTP-сервера

Передача сообщений об ошибках веб-приложений с HTTP-сервера

У меня есть nginx как http-сервер с tomcat как бэкендом (используя proxy_pass). Он отлично работает, но я хочу определить свои собственные страницы ошибок (404, 500 и т. д.) и чтобы они обслуживались nginx, а не tomcat. Например, у меня есть следующий ресурс:

https://domain.com/resource

которого не существует. Если я [ПОЛУЧАЮ] этот URL, то получаю сообщение Not Found от Tomcat, а не от nginx.

Мне нужно, чтобы каждый раз, когда Tomcat отвечает кодом 404 (или любым другим сообщением об ошибке), nginx отправлял пользователю сообщение: какой-то html-файл, доступный nginx.

Мой сервер nginx настроен очень просто:

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

И я настроил порт 8080, который принадлежит tomcat, как недоступный извне этой машины.

Я не думаю, что использование различных locationдиректив в конфигурации nginx сработает, поскольку есть некоторые ресурсы, которые зависят от URL:

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

Всегда будет возвращать 404 (или любое другое сообщение об ошибке), в то время как:

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

Вернет все, что отличается от 404 (клиент существует).

Есть ли способ обслуживания сообщений об ошибках Tomcat (сервера приложений) с помощью Nginx (http-сервера)? Чтобы проверить сообщение, отправленное директивой, proxy_passи отреагировать на него?

решение1

Ок, я нашел. В serverразделе конфигурации сайта nginx я использую:

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

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

Вам нужно добавить proxy_intercept_errors onдля nginxперехватите их. Nginx будет перехватывать только те ошибки, которые вы определили с помощью error_page.

Связанный контент