nginx 的 cache file has too long header 问题
- 0次
- 2021-05-18 12:34:08
- idczone
有时在 nginx 的日志里会碰到如下的日志错误:
cache file "/usr/local/openresty/nginx/cache/c/0c/1eb7633e809b8306294a2a7da39c8大带宽服务器0cc" 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 的文件夹里也有缓存的文件,但是访问都是正常的,我还是无法复现这种错误,不知道什么情况下会出现这个错误
之前遇到过,查了一圈应该是 cache 文件失效 /损坏导致,这种状态 nginx 会重新取源做新的 cache
谢谢,我用 ab 压测工具压测了下,有个上千并发的时候,就会有 cache file has too long header 的错误
如果 nginx 响应的 body 比较大的时候,出现的概率也大。
难道是在高并发情况下,nginx 从后端获取到文件之后,放入了一部分到缓存文件里,另一个请求过来发现文件不完整就重新去后端请求