varnish - Varnish 是否可以在 vcl_fetch 中检查请求的内容(而不仅仅是 header )并使用react?

标签 varnish varnish-vcl

我知道默认的 Varnish vcl_fetch 会查看 beresp.ttlberesp.http.* 来引用从后端,但是是否也可以检查响应的内容?我们的后端有时会因 HTML 垃圾而失败,但状态为 200 OK。我们希望能够对结果运行正则表达式,并在可能的情况下重试。

我知道 Varnish <= 3.0 的版本无论如何都不会进行流式传输,并且在传递给客户端之前不会下载整个对象,但我在文档中的 beresp 中找不到相应的字段 -我正在寻找类似 beresp.http.content

的内容

最佳答案

是和否。它是可以访问的,但只能通过内联 C,而不是 VCL 配置(据我所知)。然而,由于解析正文文本的额外开销,这并不容易做到,并且并不真正推荐。也就是说,您可以在此处看到类似您正在寻找的内容的尝试: rewrite vmod for varnish 3

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

关于varnish - Varnish 是否可以在 vcl_fetch 中检查请求的内容(而不仅仅是 header )并使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416314/

相关文章:

zend-framework - 使用Varnish/ESI和Zend框架的缓存和页面 View

varnish - 如果后端出现问题,如何在不丢失内容的情况下安全地清除 Varnish

plone - 如何制作 Varnish 循环 zeo 客户端

php - 503后端提取失败-Varnish缓存服务器Laravel

caching - 为什么 Varnish 缓存 ESI 片段(当我告诉它不缓存时)?

varnish - 快速清除Varnish中大量URL的方法

cookies - 通过varnish设置cookie

caching - hash_data vcl_hash 的作用是什么?

caching - Varnish - 如何缓存登录用户

Varnish -如何在重新获取时为所有客户端提供过时的内容?