nginx自定义返回状态
领导要求在响应失败的时候也返回200以保证不影响客户网站,这个在F5中很容易的实现,只要一句话就可以了,但是nginx中稍微麻烦了点,要答案的直接看下面这个语句就可以了,加到每个server中就可以了。
1 | proxy_intercept_errors on; |
至于为什么,还有没有别的方法且看下面。 本来想用 if语句来实现,但是发现根本不生效,因为无论server_status还是upstream_status出来的时候都已经返回给用户端了。所以下面的代码根本没有效果
1 | if ($upstream_status ~ (400|404|500|503|502)){ |
1 | if ($server_status ~ (400|404|500|503|502)){ |
上面两种代码都是没有效果的。那error_page还有别的实现方式吗? 当然有。
1 | proxy_intercept_errors on; |
可这样不是每个server都要建立一个本地主机,因为我前端都是proxy,每个server都建立也挺麻烦。要么每个后端都要加一个200.html,可后端本来都无法响应了,你加来又有何用呢。 最上面的那个代码为什么要加default_type text/plain; 这句呢。因为当用户默认输错,我们无法判断会有用户输入什么,当不是html或者图片啥的,那就会提示用户下载,那也无法体现我们的需求,所以必须强制加一句这个。