Nginx:proxy\u intercept\u错误-获取响应正文

Nginx:proxy\u intercept\u错误-获取响应正文,nginx,nginx-reverse-proxy,nginx-location,nginx-config,Nginx,Nginx Reverse Proxy,Nginx Location,Nginx Config,我有一个要求,当代理响应错误代码为401(条件#1)且响应正文有文本“无SAML令牌”(条件#2)时,我需要截获它并重定向到刷新令牌API 在只考虑错误代码401的情况下,我可以部分地这样做。无法找到读取响应正文文本的方法以给出条件#2: 请帮助我获取回复正文。提前谢谢 从Nginx论坛得到了答案 “不可能。错误是根据响应截获的 标头,并且不会从上游读取响应主体 如果错误被截获,则返回服务器。 如果需要分析响应体,请考虑使用NJS。 相反,执行适当的子请求并研究它可能会 为您工作,请参见此处了解

我有一个要求,当代理响应错误代码为401(条件#1)且响应正文有文本“无SAML令牌”(条件#2)时,我需要截获它并重定向到刷新令牌API

在只考虑错误代码401的情况下,我可以部分地这样做。无法找到读取响应正文文本的方法以给出条件#2:


请帮助我获取回复正文。提前谢谢

从Nginx论坛得到了答案

“不可能。错误是根据响应截获的 标头,并且不会从上游读取响应主体 如果错误被截获,则返回服务器。 如果需要分析响应体,请考虑使用NJS。 相反,执行适当的子请求并研究它可能会 为您工作,请参见此处了解详细信息:


从Nginx论坛得到了答案

“不可能。根据响应截获错误 标头,并且不会从上游读取响应主体 如果错误被截获,则返回服务器。 如果需要分析响应体,请考虑使用NJS。 相反执行适当的子请求并研究它可能会 为您工作,请参见此处了解详细信息:

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;
}