Отключить html-упаковку ошибок в nginx
Я использую nginx в Ubuntu для пересылки запросов Spring Boot
API-сервер. Иногда API возвращает тело с ошибками 4xx и 5xx, которое использует клиентское приложение. Например, в коде API я мог бы вернуться:
{
"message": "blah"
}
Однако nginx, похоже, оборачивает ошибки в некоторый HTML и встраивает ответ в них. Есть ли способ отключить это поведение? И есть ли способ сделать это в массовом порядке (т.е. для всех ошибок 4xx и 5xx, без явной записи их всех с error_page
например)
Подобный вопрос и принятый ответ здесь, однако, это, кажется, немного взломать. Я уверен, что есть лучший способ сделать это...
РЕДАКТИРОВАТЬ: Config выглядит так:
server {
listen 80;
server_name my.domain.com;
location / {
proxy_pass http://127.0.0.1:9001;
}
}
2 ответа
Вам просто нужно добавить директиву error_page внутри локации
server {
listen 80;
server_name my.domain.com;
location / {
error_page 404 = 404;
proxy_pass http://127.0.0.1:9001;
}
}
Что бы это сделать, это отменить error_page
из предыдущих директив, установленных в блоке http. И передать результат обратно клиенту, как он есть. Вы не хотите коды, для которых JSON должен быть отправлен обратно клиенту в этом error_page
директивы.
Вы можете попробовать обновить свой nginx conf и добавить:
error_page 403 /error403.html;
location = /error403.html {
root html;
}
или для группы ошибок:
error_page 500 502 504 /50x.html;
location = /50x.html {
root html;
}
И здесь вы можете заменить html
файлы в json
поэтому nginx вернет json ответ, например:
error_page 404 /404.json;
location = /404.json {
root html;
}
и не забудьте поставить 404.json
(и все соответствующие файлы) в корень, который указан в конфигурации.
В вашем конфиге это будет выглядеть так:
server {
listen 80;
server_name my.domain.com;
location / {
proxy_pass http://127.0.0.1:9001;
}
error_page 404 /404.json;
location = /404.json {
root html;
}
error_page 500 502 504 /50x.json;
location = /50x.json {
root html;
}
}