问题标签 [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 投票
2 回答
7503 浏览

varnish - 为什么在发送 If-Modified-Since 标头时 Varnish 不发送未修改的 304?

使用If-Modified-Since: Wed, 15 Feb 2012 07:25:00 CETset 直接向后端发送 GET 请求时,Apache 正确返回没有内容的 304。

当我通过 Varnish 3.0.2 发送相同的请求时,它会以 200 响应并重新发送所有内容,即使客户端已经拥有它。显然,这不是对带宽的良好利用。我的理解是 Varnish 支持对这个标头进行智能处理并且应该发送 304,所以我认为我的 .vcl 文件有问题。

Varnishlog 给出了这个:

如果我理解正确,该对象已经在 Varnish 的缓存中,因此它不需要联系后端,但它已经知道Last-Modified为什么它不会以 304 响应?

这是我的 VCL 文件:

任何人都可以看到问题或问题吗?

更新:根据http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

看来这可能是 Varnish 的行为。我正在发送另一个日期,该日期早于实际文件的最后修改日期,但不完全是 Varnish 中缓存的日期。

0 投票
2 回答
256 浏览

c - 内联 C 和 vcl 缓存

我有网址

我想从 url 中删除callback=jsonp999999999999&,缓存其余部分(...../suggest?term=something)并再次传递完整的 URL (...../suggest?callback=jsonp9999999999998&term=something)到后端。

当第二个请求的格式为 (...../suggest?callback=jsonp000000000000&term=something)时,varnish 必须去掉 callback=jsonp000000000000 并检查缓存是否命中并从缓存中返回结果。

这对内联 C 和 VCL 可行吗?

0 投票
2 回答
2788 浏览

varnish - 当 Varnish 缓存中的对象长度为零时,如何使其无效?

我正在尝试通过让 Varnish 继续提供这些页面的旧缓存版本(又名宽限模式)来解决后端服务器的问题,该服务器将不时开始提供具有 200 OK 响应的空白页面。

首先,我尝试检查 中的响应vcl_fetch,但据我所知,没有办法确定 中的内容长度vcl_fetch。然后我尝试在vcl_deliver(Content-Length 标头可用的地方)进行这项工作。这确实有效,但我不知道如何删除坏的缓存对象(带有空白页的对象),所以这似乎是不行的。

有人建议我在 obj.grace 和 obj.ttl 中设置vcl_deliver,这是我当前的代码:

但是,Varnish 不喜欢这样,并且在我尝试加载 VCL 时给了我这个错误:

obj.ttl如果我删除该行,我会得到同样的错误obj.grace- 两者似乎都不可写入vcl_deliver,即使文档另有说明。这是在清漆 3.0.2 上。

0 投票
2 回答
2209 浏览

varnish - 为什么我有这种感觉 Varnish 正在缓存仅由同一用户访问的页面

启动 Varnish 后,我访问了该网站一次。填充所有页面后,重新访问所有页面变得如此之快。

但是当我切换到另一台计算机并访问该站点时,似乎我必须重新开始这个缓存填充过程。

所以看起来 Varnish 没有提供其他用户缓存的缓存页面

我希望我已经清楚地解决了我的问题。

有谁知道发生了什么。

这是vcl文件

0 投票
3 回答
2217 浏览

varnish - 如何使用 varnish 向 localhost httpd 服务器发送请求,但如果不正常,将请求循环发送到一组其他节点

我们有一组 6 个后端服务于我们的网站。因为我们使用多个数据中心,所以我们发现当我们让 varnish 将请求发送到 localhost httpd 服务器(在端口 81 上运行)时,我们会获得最佳性能。这当然是 varnish 支持的非常基本的配置,可以使用 fallback director 完成:

然而,后备主管会依次尝试其他后端,直到找到一个健康的后端。最大的问题是,在上面的配置中,如果 localbackend 失败,web1 将占用所有流量!!!这将使 web1 过载并且它会生病。然后所有请求都转到 web3 ......现在它将获得正常流量的 3 倍......导致级联故障。

因此,我们需要一个配置,如果它是健康的,则允许所有请求发送到 localhost httpd 服务器,但如果不是,则以循环类型的方式将请求发送到其他健康的服务器。

提前感谢您提供您可能想到的任何建议和解决方案......非常感谢您的帮助。

0 投票
1 回答
811 浏览

varnish - 使用 Varnish 删除 Cookie

我有以下 VCL:

我知道它部分有效,因为我在第一次访问该页面时得到以下标题:

但是我也得到:

我假设我在以下方面犯了错误:

但从我的搜索来看,这似乎是正确的?如果有更多经验的人能指出我正确的方向,我将不胜感激。

提前感谢任何帮助/提示/指针:-)

0 投票
1 回答
618 浏览

varnish - 使用 max-age 请求标头

如何配置我的 VLC 以让 Varnish 尊重“Cache-Control max-age”请求标头?

我注意到,默认情况下,varnish 会提供缓存的内容,即使我在浏览器中按 F5(因此请求“新”副本)。

0 投票
1 回答
1489 浏览

php - 清漆缓存 + PHP

我发现使用php_exec. 对于可用的库,如php-varnish,这种方法非常舒服。

什么是最快的 curl 解决方案以及使用 curl 和 varnish的安全安排是什么?

0 投票
1 回答
935 浏览

node.js - html 重定向在使用清漆时被阻止

我在 ubuntu 11 上使用 varnish 3.0 - 重定向由 expressjs(v2.5.8 - running node.js 0.6) 处理 - 重定向由 express 调用(在没有清漆的情况下工作)但是当在两者之间使用清漆时,重定向到新页面被阻止(显示“找到错误 302”)。

在 varnish 的 vcl 配置文件中,我尝试根据 URL 和 Referer 传递(返回)(在 sub vcl_recv 部分中),但我似乎配置错​​误(或需要添加更多配置步骤)。非常欢迎对 vcl 文件中的更改提出任何想法/建议,这将允许 varnish 让 expressjs 重定向到新页面。

提前致谢。

0 投票
3 回答
16172 浏览

varnish - Varnish 客户端 IP 未登录 Apache 日志

我已经用 Apache 配置了 Varnish 3,它运行得很好。但是我无法在 Apache 日志中登录客户端 ip。我尝试了一些解决方案,但没有运气。现在我的 Apache 访问日志文件正在记录服务器 IP 而不是客户端 IP 地址。

以下是我的配置供您考虑:

清漆 VCL:(/etc/varnish/default.vlc):http ://pastebin.com/PuBqZ6fx

阿帕奇配置

/etc/httpd/conf/httpd.conf

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined

阿帕奇虚拟主机

...... 其他东西 ...... ErrorLog 日志/fr-error-log CustomLog 日志/fr-custom-log varnishcombined ...... 其他东西 .....

注意:安装的 Varnish 版本是 varnish-3.0.2-1.el5.x86_64

谢谢。拉赫尔