0
我无法理解在后端500错误情况下Varnish的行为。 - 为什么它会增加MAIN.n_object计数器?我认为它应该只缓存20x和重定向。 - 如果第一个请求使用来自后端的500响应完成,则对相同url不进行缓存的所有后续请求,即使后端开始返回200响应。 帮我理解这个逻辑。为什么Varnish在500错误后停止缓存200响应
我无法理解在后端500错误情况下Varnish的行为。 - 为什么它会增加MAIN.n_object计数器?我认为它应该只缓存20x和重定向。 - 如果第一个请求使用来自后端的500响应完成,则对相同url不进行缓存的所有后续请求,即使后端开始返回200响应。 帮我理解这个逻辑。为什么Varnish在500错误后停止缓存200响应
如果你真的使用默认的VCL,那么默认的逻辑就像你描述的那样。但是你错过了它在一段时间后开始缓存它。通常2分钟。
这需要实现hit-for-pass - 我对此的理解是:光油会默认堆积requets到后端,而不是给他们,他们到达了优化。当Varnish看到某些东西不可缓存(500状态等)时,它不会执行堆积行为并直接与后端对话(即时通过)。
如果您想要减少页面被标记为按转换时间的时间量,则需要添加一些VCL。这将确保没有运行内置的具有120s值的VCL。以下将以500秒状态标记为不可缓存10秒的页面:
sub vcl_backend_response {
if (beresp.status == 500) {
set beresp.ttl = 10s;
set beresp.uncacheable = true;
return (deliver);
}
}
你是100%正确的!最近我用计时器测量了它的2分钟问题期。如果刚刚发生500错误,后端再次正常,为什么在这2米通过之前无法缓存它的响应? – Molfar
如果在500次错误后的10秒内后端没问题,如何避免在110秒内一次又一次地取回? – Molfar
查看更新的答案。类似的东西应该工作(未经测试的代码)。 –