有没有办法配置清漆或任何其他缓存反向代理,以便在后端失败时从其缓存中提供页面?目前,如果后端出现503 Service Unavailable
故障,则会将错误返回给浏览器。如果访问者在修复后端时看到缓存版本而不是错误页面,我会更喜欢它。
我的设置:
[varnish (public ip)] <===> [router] <===> [web server (private ip)]
PS:我只有一个后端网络服务器。
有没有办法配置清漆或任何其他缓存反向代理,以便在后端失败时从其缓存中提供页面?目前,如果后端出现503 Service Unavailable
故障,则会将错误返回给浏览器。如果访问者在修复后端时看到缓存版本而不是错误页面,我会更喜欢它。
我的设置:
[varnish (public ip)] <===> [router] <===> [web server (private ip)]
PS:我只有一个后端网络服务器。
理论上,如果一个对象是过期的,你不希望它被缓存服务——如果它没有过期,过期时间应该设置得更长......
另一方面,Varnish 认识到理论和实践存在分歧,因此我认为
grace
VCL 中的指令可以处理这种情况以及该页面中记录的更平淡无奇的用法。是的,有鱿鱼。Mark Nottingham 在 Yahoo 从事这项工作,有关所有详细信息,请参阅这篇出色的博客文章。
有一点,Squid 3.0 是对 Squid 代码库的一个相当大的重写,所以不要盲目地部署最新版本的 Squid,而要先检查哪些版本的 Squid 具有此功能。它可能不会被移植到 3.0。
我认为 womble 关于 Varnish 并通过 Varnish 的 VCL 进行此操作是正确的,但我从未使用 Varnish 配置过类似的东西,所以我不能说。
2.1.0 引入了优雅的圣人模式:http: //varnish-cache.org/wiki/VCLExampleSaintMode
一个应该有效的技巧:您可以不时生成一个缓存页面并配置一个 503 处理程序以使用缓存页面。
根据需要添加/修改您的 conf:
Varnish 有一个名为“grace”的功能,它允许您分配一个宽限期,在此期间对象将在 TTL 过期后保留。如果您的后端出现故障,Varnish 会为优雅(陈旧)对象提供服务。
一探究竟:
http://varnish.projects.linpro.no/wiki/VCLExampleGrace
是的; stale-if-error / max-stale 在 Squid 2.7 和 2.HEAD 中,但不是 3.x(目前)。