成功最有效的方法就是向有经验的人学习!

nginx缓存5xx状态造成的故障

我们都知道nginx可以针对不同的状态码进行缓存时间的调整,最近我就遇到这样的一起问题,一个客户后端只有一个WEB节点,由于网络波动的原因,造成后端向NGINX返回了500错误。此时NGINX对500缓存了,时长为10分钟。这期间再有用户访问这个页面时就不会再向源站发起请求了,而是直接返回缓存数据,即500错误页。

proxy_cache_valid  #设置不同的状态码的缓存时长。

例如:

proxy_cache_valid 200 302 10m; 
proxy_cache_valid 301 1h; 
proxy_cache_valid 404 1m; 
proxy_cache_valid any 1m;

针对某个状态也可以设置为0m;

当如果有多个后端节点时也可以使用其他节点的数据返回给用户,当某节点收到5XX错误信息时。

proxy_next_upstream error timeout http_500 non_idemponent; 
proxy_next_upstream_timeout 6s;
proxy_next_upstream_tries 2

绕开缓存
// 请求中有下面参数值时不走缓存

proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;

这里再引入一个概念,当源站发生了错误不能向客户提供服务时,我们也可以考虑使用旧的缓存返回给用户。

proxy_cache_use_stale    #增强站点容错能力

源站有问题时,nginx可以通过proxy_cache_use_stale指令开启容错能力,即使用缓存内容来响应客户端的请求。举例如下:

location / {  
    ...  
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;  
}  

如上配置表示,当作为cache的NGINX收到源站返回error、timeout或者其他指定的5XX错误,并且在其缓存中有请求文件的陈旧版本,则会将这些陈旧版本的文件而不是错误信息发送给客户端。

赞(0) 打赏
未经允许不得转载:陈桂林博客 » nginx缓存5xx状态造成的故障
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册