nginx自定义返回状态

领导要求在响应失败的时候也返回200以保证不影响客户网站,这个在F5中很容易的实现,只要一句话就可以了,但是nginx中稍微麻烦了点,要答案的直接看下面这个语句就可以了,加到每个server中就可以了。

proxy_intercept_errors on;
 error_page  404 400 500 503 502 =200 @handler;
 location @handler {
 default_type text/plain;
 return 200;
 }

至于为什么,还有没有别的方法且看下面。

本来想用 if语句来实现,但是发现根本不生效,因为无论server_status还是upstream_status出来的时候都已经返回给用户端了。所以下面的代码根本没有效果

if ($upstream_status ~ (400|404|500|503|502)){
   returen 200; break;
}
if ($server_status ~ (400|404|500|503|502)){
   returen 200; break;
}

上面两种代码都是没有效果的。那error_page还有别的实现方式吗? 当然有。

proxy_intercept_errors on;
 error_page  404 400 500 503 502 =200 /200.html;

可这样不是每个server都要建立一个本地主机,因为我前端都是proxy,每个server都建立也挺麻烦。要么每个后端都要加一个200.html,可后端本来都无法响应了,你加来又有何用呢。

最上面的那个代码为什么要加default_type text/plain; 这句呢。因为当用户默认输错,我们无法判断会有用户输入什么,当不是html或者图片啥的,那就会提示用户下载,那也无法体现我们的需求,所以必须强制加一句这个。

关于 Timo
XNIX SA & MYSQL DBA

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: