每当我用 Varnish 处理大型文件时,是否有某种方法可以让 Varnish 只传输大于特定大小的文件?Varnish 在处理大型文件(例如,845472505 字节(6.3G))时会给出一些 502 错误,我认为这是因为我的 malloc 缓存只有 256m。
当前配置:
DAEMON_OPTS="-a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -p send_timeout=604800 -p http_resp_hdr_len=8192 -s malloc,256m"
请注意,我不能仅仅“删除”文件 - 我只是不想缓存超过一定大小的文件。
编辑:因为我必须等到 8 小时过去后才能回答我自己的问题......
因此,似乎我的后端超时设置得不够高,无法传输文件。我增加了它,它似乎不再给我大文件发送 502 错误。我还转换为使用文件缓存(这是在 SSD VPS 上),以便我可以存储整个文件。
答案1
如果你希望阻止 Varnish 缓存某个文件,你可以no-cache
从后端服务器发送一个标头。例如:
Cache-Control: private, no-cache, no-store, max-age=0
或者,你可以检查Content-Length
VCL 中的标题并据此采取行动。
sub vcl_fetch {
if (beresp.http.Content-Length !~ "[0-9]{10,12}") {
return(deliver);
}
}