Nginx代理缓存缓存502错误。

6
我正在使用Nginx代理缓存来缓存来自Node服务器的响应。当该服务器离线时,Nginx返回一个自定义的502页面。到此为止一切顺利...
当Node服务器重新上线时,Nginx会在5分钟内保持返回502页面(即我的缓存时间)。如果我删除缓存目录中的所有文件,也没有任何影响。如果我重启Nginx,它会破坏缓存并开始再次提供真实内容。
Nginx缓存502是正常的吗?请注意,它不是缓存来自后端服务器的502响应,而是缓存服务器不可访问的事实。
我该怎么做才能阻止这种情况的发生?
1个回答

15
我自己想出了解决方法。Nginx确实会缓存上游服务器不可访问的信息。
为了解决这个问题,我将我的缓存配置从proxy_cache_valid any 5m;更改为proxy_cache_valid 5m;。删除any意味着您只想缓存200、301和302响应。

同样适用于所有的*_cache_valid指令,包括uwsgi_cacheuwsgi_cache_valid以及fastcgi_cachefastcgi_cache_valid。 为了便于通过网络搜索发现这个已经很明显的点而进行澄清。 - davidjb
感谢davidjb。我认为任何响应都会被缓存,但没有响应也会被缓存,这让我感到惊讶。此外,我看到的所有关于清除nginx缓存的建议都表明您可以删除所有缓存文件。但对于这种情况,这种方法行不通。 - Jake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接