问题标签 [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.
regex - 剥离选择查询字符串属性/值对,以便清漆不会因它们而改变缓存
我的目标是将某些查询字符串属性及其值“列入白名单”,以便清漆不会改变网址之间的缓存。
例子:
在上面的示例中,我想将“utm_code”而不是“type”列入白名单,所以在第一个 url 被点击后,我希望 varnish 将缓存的内容提供给第二个 url。
但是,在第三个 url 的情况下,属性“type”值不同,因此应该是清漆缓存未命中。
我尝试了以下两种似乎不起作用的方法(在我现在找不到的 drupal 帮助文章中找到)。可能是因为我的正则表达式错误。
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 无法为他们创建更多会话文件,我的客户实际上都无法向他们的购物篮添加任何内容。我正在寻找更多解决问题的方法
varnish - 清漆使用标准输出输出 ReqEnd
是否可以在 VCL 中使用 std.log 输出ReqEnd?我想在 varnishncsa 日志记录中使用 ReqEnd。
regex - 正则表达式匹配任何不是子模式的东西
我的 HTTP 标头中有 cookie,如下所示:
我需要提取前端之后的 26 个字符串(例如ovsu0p8khivgvp29samlago1q0
)。以下正则表达式与我匹配:
但是,我使用的是清漆缓存,只能使用正则表达式替换。因此,要提取该 cookie 值(26 个frontend
字符串),我需要匹配与该模式不匹配的所有字符(因此我可以将它们替换为''
)。
我已经做了相当多的谷歌搜索,但到目前为止还一片空白。我试过以下
- 匹配与我想要的模式不匹配的字符:
[^((?<=frontend=)[A-Za-z0-9]{26}(?=;))]
匹配随机字符,包括我想要保留的字符
如果有人能指出我正确的方向,或者指出我可能出错的地方,我将不胜感激。
drupal - 清漆缓存 - 如何仅为主页清除/删除缓存
我正在使用 Drupal 7 最新的开发版本。
我已经安装了 Varnish 和 Expire 模块并进行了设置。他们工作得很好,但我有一个关于从清漆中删除缓存的问题。
问题是如何仅删除索引(主页)页面的清漆缓存而不删除其他页面的缓存。我查看了他的清漆日志,发现每次 Drupal 执行命令时都会删除整个清漆缓存
该命令由 varnish 模块或 expire 模块执行,表示删除主页(索引)页面的缓存。但正如我所见,它正在删除清漆中的所有缓存页面。
如何解决这个问题?如何仅删除主页的缓存?
php - 使用 Varnish HTTP 加速器清除目录下的所有文件
是否可以使用 Varnish 清除特定目录下的所有文件?你怎么能在 PHP 脚本中完成这个?
例如,如果 URL 包含路径/product/a-specific-product/
,是否也可以清除诸如/product/a-specific-product/a-sub-page/
?
我有以下函数用于清除 Varnish 3 中的特定 URL(类的一部分VarnishPurger()
:
varnish - Varnish HitPass 调试
我注意到我的一个网站上的一个问题,即我的内容页面(不应该设置任何 cookie,应该都返回带有 max-age 集的“Cache-Control:public”,并且不需要授权)。
我的问题是,HitPass 对象以某种方式进入了我的缓存,从该页面中删除了缓存。我需要对此进行调试,但对如何最好地做到这一点感到困惑,特别是因为我无法复制这个问题。
我注意到清漆在清漆日志中的 HitPass 旁边给了我一个 ID。我假设这是生成 HitPass 的请求的清漆 ID,并且在清漆日志中搜索会告诉我响应到底出了什么问题?
从我要缓存的页面中删除 SetCookie 标头会更好吗?问题是即使通过了 URL 也会调用 vcl_fetch ......有没有办法在 vcl_fetch 中判断当前请求是否已通过 vcl_recv 传递?
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
varnish - Varnish 能否评估响应中的 HTML 以确定是否缓存?
我想根据页面的内容从清漆缓存中排除某些页面(例如,如果表单使用特定的隐藏字段,这是一项安全功能,并且在每次页面刷新时都需要唯一)。
我有几十个表单,所以我不想从缓存中单独排除每个唯一页面。
这在VCL中可能吗?
cookies - Varnish 从后端响应中删除特定的 cookie
我需要从清漆的后端响应中删除特定的 cookie。
我的后端服务器设置了一堆我不需要的 cookie,不幸的是我无法控制,所以我想删除它们。
但是我需要一些 cookie,所以我希望能够按其名称删除 cookie。
例如,我想重命名一个名为 bad_cookie 的 cookie,但同时保留一个名为 good_cookie 的 cookie。
我找到了很多关于删除特定请求 cookie 的资源,但没有找到关于删除后端响应 cookie 的资源。
这在 Varnish 中可行吗?