问题标签 [varnish-vcl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
17458 浏览

regex - 剥离选择查询字符串属性/值对,以便清漆不会因它们而改变缓存

我的目标是将某些查询字符串属性及其值“列入白名单”,以便清漆不会改变网址之间的缓存。

例子:

在上面的示例中,我想将“utm_code”而不是“type”列入白名单,所以在第一个 url 被点击后,我希望 varnish 将缓存的内容提供给第二个 url。

但是,在第三个 url 的情况下,属性“type”值不同,因此应该是清漆缓存未命中。

我尝试了以下两种似乎不起作用的方法(在我现在找不到的 drupal 帮助文章中找到)。可能是因为我的正则表达式错误。

0 投票
1 回答
1821 浏览

magento - wget --mirror 不创建清漆缓存

我在我的服务器上的 80 端口安装了清漆缓存,Apache 作为 8080 端口上的内容服务器。如果我运行 wget --mirror example.com 它应该爬过我的整个网站并创建清漆缓存,对吗?它不是。例如,通过运行 wget --mirror example.com,我可以在输出中看到它已通过 example.com/abc.html。但是当我从浏览器访问 example.com/abc.html 时,从我的响应头中我可以看到它正在返回 Varnish MISS(而且它也需要很长时间)。但是,如果我这次通过浏览器再次访问相同的 url,则缓存已生成,因为我可以在响应标头中看到 Varnish HIT

这是另一个有趣的事实:如果我只运行 wget example.com/abc.html 它将创建清漆缓存!另一个有趣的事实:如果我运行 wget --mirror example.com/abc.html 它将为 abc.html 创建清漆缓存,但不会创建更多页面

因此,出于某种原因,使用 --mirror example.com 会为第一页创建清漆缓存,但不会为其他页面创建清漆缓存。

如果有任何不同,我正在使用 Magento

我试过: wget --mirror --no-http-keep-alive example.com 但它不起作用

这是我的清漆 vcl

编辑,回答:

我不知道添加 --no-cookies 是否修复了它(不知道 wget --mirror 是否存储 cookie,如果有,那么它会修复它)或者添加标题是否修复了它,但这有效并且创建我可以通过浏览器看到的清漆缓存:

第二次编辑,与先前的答案相关。重要的

任何使用 Magento 的人,都不要使用我上面的解决方案。由于 --no-cookies,Magento 最终会在 var/session 文件夹下为每个请求创建一个新的会话文件。这导致每次运行上述命令的 wget 都会填充我的会话文件夹中的 250,000 个文件!这导致文件夹已满,因为 Magento 无法为他们创建更多会话文件,我的客户实际上都无法向他们的购物篮添加任何内容。我正在寻找更多解决问题的方法

0 投票
1 回答
310 浏览

varnish - 清漆使用标准输出输出 ReqEnd

是否可以在 VCL 中使用 std.log 输出ReqEnd?我想在 varnishncsa 日志记录中使用 ReqEnd。

0 投票
3 回答
1737 浏览

regex - 正则表达式匹配任何不是子模式的东西

我的 HTTP 标头中有 cookie,如下所示:

我需要提取前端之后的 26 个字符串(例如ovsu0p8khivgvp29samlago1q0)。以下正则表达式与我匹配:

但是,我使用的是清漆缓存,只能使用正则表达式替换。因此,要提取该 cookie 值(26 个frontend字符串),我需要匹配与该模式不匹配的所有字符(因此我可以将它们替换为'')。

我已经做了相当多的谷歌搜索,但到目前为止还一片空白。我试过以下

  • 匹配与我想要的模式不匹配的字符:[^((?<=frontend=)[A-Za-z0-9]{26}(?=;))]匹配随机字符,包括我想要保留的字符

如果有人能指出我正确的方向,或者指出我可能出错的地方,我将不胜感激。

0 投票
4 回答
6743 浏览

drupal - 清漆缓存 - 如何仅为主页清除/删除缓存

我正在使用 Drupal 7 最新的开发版本。

我已经安装了 Varnish 和 Expire 模块并进行了设置。他们工作得很好,但我有一个关于从清漆中删除缓存的问题。

问题是如何仅删除索引(主页)页面的清漆缓存而不删除其他页面的缓存。我查看了他的清漆日志,发现每次 Drupal 执行命令时都会删除整个清漆缓存

该命令由 varnish 模块或 expire 模块执行,表示删除主页(索引)页面的缓存。但正如我所见,它正在删除清漆中的所有缓存页面。

如何解决这个问题?如何仅删除主页的缓存?

0 投票
2 回答
2218 浏览

php - 使用 Varnish HTTP 加速器清除目录下的所有文件

是否可以使用 Varnish 清除特定目录下的所有文件?你怎么能在 PHP 脚本中完成这个?

例如,如果 URL 包含路径/product/a-specific-product/,是否也可以清除诸如/product/a-specific-product/a-sub-page/?

我有以下函数用于清除 Varnish 3 中的特定 URL(类的一部分VarnishPurger()

0 投票
1 回答
906 浏览

varnish - Varnish HitPass 调试

我注意到我的一个网站上的一个问题,即我的内容页面(不应该设置任何 cookie,应该都返回带有 max-age 集的“Cache-Control:public”,并且不需要授权)。

我的问题是,HitPass 对象以某种方式进入了我的缓存,从该页面中删除了缓存。我需要对此进行调试,但对如何最好地做到这一点感到困惑,特别是因为我无法复制这个问题。

我注意到清漆在清漆日志中的 HitPass 旁边给了我一个 ID。我假设这是生成 HitPass 的请求的清漆 ID,并且在清漆日志中搜索会告诉我响应到底出了什么问题?

从我要缓存的页面中删除 SetCookie 标头会更好吗?问题是即使通过了 URL 也会调用 vcl_fetch ......有没有办法在 vcl_fetch 中判断当前请求是否已通过 vcl_recv 传递?

0 投票
1 回答
4283 浏览

varnish - 为什么在 Varnish 的请求中添加 Cookie 时 beresp.ttl 设置为 0?

好的,所以我正在尝试让 Varnish 正常工作,但我有一个无法解释的奇怪行为(可能是由于缺乏理解)。

这是我正在尝试做的事情:

我得到:

现在,如果我在请求中添加 Cookie:

我得到一个非缓存的响应和一个不可缓存的警告:

如果检查后面的 vcl 配置,X-Cacheable: NO:Not Cacheable如果 beresp.ttl 小于或等于 0,则设置标头。

为什么?

我还假设一个Cookie返回 a的请求Cache-Control: public应该被缓存,只要后端承担正确设置public参数的责任。

我会假设在X-Cacheable: NO:Got Session使用 Cookie 发出请求时会设置 ,但它甚至没有更进一步。

启动 varnish 守护进程的命令行:

/usr/sbin/varnishd -P /var/run/varnishd.pid -a :6081 -T 192.168.1.100:6082 -f /etc/varnish/custom.vcl -S /etc/varnish/secret -s malloc,256m

这是我的custom.vcl

0 投票
1 回答
117 浏览

varnish - Varnish 能否评估响应中的 HTML 以确定是否缓存?

我想根据页面的内容从清漆缓存中排除某些页面(例如,如果表单使用特定的隐藏字段,这是一项安全功能,并且在每次页面刷新时都需要唯一)。

我有几十个表单,所以我不想从缓存中单独排除每个唯一页面。

这在VCL中可能吗?

0 投票
1 回答
8328 浏览

cookies - Varnish 从后端响应中删除特定的 cookie

我需要从清漆的后端响应中删除特定的 cookie。

我的后端服务器设置了一堆我不需要的 cookie,不幸的是我无法控制,所以我想删除它们。

但是我需要一些 cookie,所以我希望能够按其名称删除 cookie。

例如,我想重命名一个名为 bad_cookie 的 cookie,但同时保留一个名为 good_cookie 的 cookie。

我找到了很多关于删除特定请求 cookie 的资源,但没有找到关于删除后端响应 cookie 的资源。

这在 Varnish 中可行吗?