2015-02-09 92 views
2

我知道默认的光油vcl_fetch看着beresp.ttlberesp.http.*来引用从后端返回的HTTP头,但是有可能检查响应的内容吗?我们的后端有时会因为垃圾HTML而失败,但状态为200 OK。我们希望能够对结果运行正则表达式,并尽可能重试。Varnish是否有可能在vcl_fetch中检查请求的内容(不仅仅是头文件)并作出反应?

据我所知,版本的光油< = 3.0在传递到客户端之前不会流式传输并下载整个对象,但我无法在文档中找到beresp中的相应字段 - 我在寻找某些东西像beresp.http.content

回答

2

是的,没有。它是可访问的,但只能通过内联C,而不是VCL配置(据我所知)。然而,由于解析正文文本的额外开销,这并不容易,也不是真正的推荐。也就是说,你可以在这里看到你想要的东西:rewrite vmod for varnish 3

如果你的垃圾HTML响应是特定长度的,你可以根据响应的Content-Length头重试请求。或者,您可以考虑添加客户端JS来评估HTML,并向URL发出AJAX请求以清除任何垃圾页面的缓存。最后,如果您知道只有您的网站的特定子集返回无效结果,则可以尝试通过类似OpenResty的LuaJIT或nginx代理这些URL并启用子模块,并在那里进行主体解析。

+0

感谢vmod链接和想法。我会给JS/AJAX调用解决方案一个尝试.. – 2015-02-24 11:01:04

相关问题