symfony - 父请求和 ESI 子请求之间有任何通信( Varnish 、 session 需求)吗?

标签 symfony session caching varnish esi

我正在尝试研究 Varnish 。

我的问题是。我确实有一个主要请求/响应,我想使用 Varnish 缓存它。 html结构内部有ESI标签。我想要很多。一个标签具有较长的 ttl,其他标签则具有 ttl=0s; (带有登录框的 ESI 内容)。

无论如何,我希望 varnish 能够满足主要请求,但向后端 ESI 内容询问一些信息,例如 header 。 当 ESI 内容返回时(因为我首先理解是父请求,然后是与 ESI 的子请求),我想要进行某种通信。

Remember that changes made to beresp are stored in obj afterwards. And the resp.* variables are copies of what’s about to be returned - possibly of obj. A change to beresp will, in other words, affect future obj.* and resp.* variables. Similar semantics apply to req.* and bereq.. bereq. is the “backend request” as created from the original request. It may differ slightly - Varnish can convert HEAD requests to GET for example.

来自https://www.varnish-software.com/static/book/VCL_functions.html

例如: 如果 ESI 子请求响应中有 header “X-ESI-Cookie”,我想将其传递给主响应。

我能找到有关 ESI 的任何信息的唯一方法是 reg.esi_level

if (req.esi_level > 0 ) {
    set req.http.*;
}

基本上我想要实现的是:

我希望 Varnish 缓存我的整个页面,但为了 session 管理,通过管道传输 ESI 内容,但为了保留 session ,我需要将一些 header 从子 (ESI) 传递到父响应(但我相信这是显而易见的)。

我相信 Varnish 请求(父级和 ESI 的)是分开处理的,这意味着我没有任何沟通的机会。 Varnish 只需用 ESI 响应中的 html 替换标签即可。是这样吗?

我开始相信没有解决方案,但也许有人对这个问题有更好的解决方案:如何保留 session ?我找到了一些解决方案,但没有一个适合我的需求。 (我相信对于 Fake-Session,其 ID 是由 Varnish 使用一些 C 代码生成的,但没有锁)。

我想这样做,因为对我来说采用当前的 symfony2 应用程序会更容易。 无论如何,我不敢相信 symfony2 没有想到这种功能。除了少数小部件(ESI 内容)之外,我的页面主要是静态的。

如果能够将 ESI 内容(请求、内容和响应)传递给对象变量,那就太好了:

obj.*

我不敢相信 Varnish 对象没有任何有关 ESI 内容的信息。

值得注意的是,我正在 *.vcl 配置中寻找解决方案,但任何解决方案都适合我。

提前致谢。

最佳答案

可以使用 libvmod-var 将变量从主请求解析为 ESI 子请求,但这并没有真正记录下来,但它在当前版本的 libvmod-var 和 varnish 3.0.6 中运行良好。

关于symfony - 父请求和 ESI 子请求之间有任何通信( Varnish 、 session 需求)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26054376/

相关文章:

css - Symfony2 - FormBuilder - 添加一个类到字段和输入

forms - 如何在 Symfony EntityType 表单小部件上添加其他选项?

php加密的ssl session 数据

php - 运输车的双向 session

PHP session 固定/劫持

asp.net - 禁用asp.net缓存

android - 更新用户的个人资料图片

symfony - 保持包含的 Twig 子模板的缩进级别

php - symfony2中的全局变量在php模板中使用

java - 如何在 squareup.okhttp3 中缓存响应