Nginx: proxy_intercept_errors - получить тело ответа - PullRequest
0 голосов
/ 14 июля 2020

У меня есть требование, когда, когда код ошибки проксируемого ответа - 401 ( условие # 1 ), а в теле ответа есть текст «Нет токена SAML» ( условие # 2 ), мне нужно чтобы перехватить его и перенаправить на refre sh token API.

Я мог бы сделать это частично, где учитывается только код ошибки 401. Не удалось найти способ прочитать текст ответа, чтобы дать условие № 2 :

location /service {
   proxy_intercept_errors on;
   error_page 401 = @refresh;
}
location @refresh {

   (# Here check if the response body has text "No SAML Token". If yes return 401 directly.)

   set $original_uri $scheme://$http_host$request_uri;
   return 307 https://localhost:8083/service/auth/refresh?uri=$original_uri;
}

Пожалуйста, помогите мне получить текст ответа. Заранее спасибо!

1 Ответ

0 голосов
/ 14 июля 2020

Получил ответ от Nginx форума.

"Нет никакого способа. Ошибки перехватываются на основе заголовков ответов, и тело ответа не читается с вышестоящего сервера, если ошибка перехватывается. Если вам нужно проанализировать тело ответа, рассмотрите возможность использования вместо этого njs. Выполнение соответствующего подзапроса и его изучение может сработать для вас, подробности см. здесь: http://nginx.org/en/docs/http/ngx_http_js_module.html http://nginx.org/en/docs/njs/reference.html#subrequest "

https://forum.nginx.org/read.php?2, 288683,288689 # msg-288689

...