我有2个客户端可以通过nginx代理向服务器发送相同的HTTP请求。
一个是浏览器另一个是我自己的程序,区别在于我自己的程序的请求发送有自定义HEADER {{1} }
我的目标是:
如果有任何请求导致服务器的my-header=me
响应,我希望浏览器显示错误页面,我自己的程序记录来自服务器的原始响应其中包含异常堆栈。
使用nginx http:500
和proxy_intercept_errors=on
我可以导航到浏览器请求的错误页面,但我也会在我自己的程序中记录此html页面强烈的>我不想要的。
我已经搜索了error_page 500 /500.html
或conditional proxy_intercept_errors
等解决方案但没有得到答案。
我如何通过nginx设置实现我的目标?
答案 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
与@
命名位置一起使用,但不要认为它是出于此目的。