nginx 的 cache file has too long header 问题

2020-10-20 23:41:22 +08:00
 kokol
有时在 nginx 的日志里会碰到如下的日志错误:

cache file "/usr/local/openresty/nginx/cache/c/0c/1eb7633e809b8306294a2a7da39c80cc" has too long header

一般什么情况下,才会出现这个错误,我的 proxy_buffer_size 这些设置都是用的默认值。

google 搜索了一下,看到 nginx 的源代码里有如下的代码:
https://github.com/phusion/nginx/blob/master/src/http/ngx_http_file_cache.c
if (h->body_start > c->body_start) {
ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0,
"cache file \"%s\" has too long header",
c->file.name.data);
return NGX_DECLINED;
}

http://hg.nginx.org/nginx/rev/6f97afc238de 这个网站也有相应的说明

我自己也测试了一下,proxy_buffer_size 这些设置都是用的默认值,然后请求一个 2M 的文件,proxy_cache 的文件夹里也有缓存的文件,但是访问都是正常的,我还是无法复现这种错误,不知道什么情况下会出现这个错误
2651 次点击
所在节点    NGINX
2 条回复
geekzu
2020-10-21 09:58:29 +08:00
之前遇到过,查了一圈应该是 cache 文件失效 /损坏导致,这种状态 nginx 会重新取源做新的 cache
kokol
2020-10-22 11:17:20 +08:00
@geekzu 谢谢,我用 ab 压测工具压测了下,有个上千并发的时候,就会有 cache file has too long header 的错误
如果 nginx 响应的 body 比较大的时候,出现的概率也大。

难道是在高并发情况下,nginx 从后端获取到文件之后,放入了一部分到缓存文件里,另一个请求过来发现文件不完整就重新去后端请求

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/716891

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX