NGINX有条件地打开/关闭proxy_intercept_errors

时间:2017-06-07 03:10:26

标签: nginx http-status-code-500

我有2个客户端可以通过nginx代理向服务器发送相同的HTTP请求。

一个是浏览器另一个是我自己的程序,区别在于我自己的程序的请求发送有自定义HEADER {{1} }

我的目标是: 如果有任何请求导致服务器的my-header=me响应,我希望浏览器显示错误页面,我自己的程序记录来自服务器的原始响应其中包含异常堆栈。

使用nginx http:500proxy_intercept_errors=on我可以导航到浏览器请求的错误页面,但我也会在我自己的程序中记录此html页面我不想要的。

我已经搜索了error_page 500 /500.htmlconditional proxy_intercept_errors等解决方案但没有得到答案。

我如何通过nginx设置实现我的目标?

1 个答案:

答案 0 :(得分:0)

您应该能够使用Nginx map来检测标头值以创建交换机。

然后您应该可以使用rewrite相应地路由到所需的location

map $http_my_header $intercept {
  default "intercept_on";
  me "intercept_off";
}
server {
  listen 80 default_server;

  location /test {
    rewrite /test /$intercept last;
  }

  location /intercept_on {
    proxy_intercept_errors on;
    default_type text/plain;
    echo "Intercept errors is: On";
  }

  location /intercept_off {
    proxy_intercept_errors off;
    default_type text/plain;
    echo "Intercept errors is: Off";
  }
}

rewrite旁边,您还可以将try_files@命名位置一起使用,但不要认为它是出于此目的。