问题标签 [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 回答
2937 浏览

http - 如果 Varnish 从主服务器获得 404,是否可以将其配置为尝试使用第二台服务器获取某些资源?

这对我来说是一个完美的解决方案,因为我需要为 Web 浏览器提供一些生成的内容。我的计划是按需生成内容并将其存储以备下次使用。我不希望浏览器每次都调用我的服务(生成内容)。如果可用,我希望他们直接转到“缓存”资源,如果不可用,则只调用该服务。因此,我将 Varinsh 放在运行服务的服务器 A 和存储先前生成的内容版本的服务器 B 前面。如果它收到对尚未缓存的资源的请求,它将尝试服务器 B。在收到 404 响应后,它将从服务器 A 请求相同的资源。

Varnish可以用VCL这样配置吗?如果没有,是否有您知道的类似解决方案?

PS 我不想将 302 重定向发送到浏览器,而且我无法控制服务器 B 以使其发送此类重定向而不是 404

0 投票
2 回答
2949 浏览

varnish - 有人可以告诉我如何解决这个清漆错误吗?

这是我得到的错误:

来自 VCC 编译器的消息:

未终止的字符串

(输入第 39 行,第 19 行)

------------------################################ #############

运行 VCC-compiler 失败,退出 1 VCL 编译失败

这是default.vcl

0 投票
1 回答
715 浏览

regex - 负载均衡器后面的清漆不缓存内容

我正在使用这一行来删除 cookiedefault.vcl以允许 Varnish 缓存

但它似乎不起作用。

Varnish 在负载均衡器后面,负载均衡器设置了一个持久性 cookie,它以这种格式出现在标头中:

我在模拟器中运行了这个正则表达式,它捕获了上面的行(直到第一个“;”)。所以我认为这个正则表达式应该抓住它,但它似乎没有?当我绕过这个负载均衡器时,内容会被缓存。

有任何想法吗?我错过了什么?

0 投票
1 回答
1719 浏览

list - 在 VCL(Varnish 配置语言)中定义列表

有没有办法用 Varnish VCL 语言定义域列表?我想 ACL 也有类似的东西。我想做这样的事情(以 ACL 为例)。

我可以只使用单独的 RegEx 测试,但如果我想在 VCL 的其他地方使用这些域,它就不是很可重用。

谢谢!

0 投票
4 回答
1661 浏览

apache - 根据请求的文件是否存在通过 Varnish 在后端之间进行选择的好方法

我在上面安装了 Apache2、nginx 和 Varnish。Varnish 接收请求,确定它用于什么后端(静态到 nginx,动态到 Apache),从后端获取响应并在需要时缓存它。

除其他外,Apache 会生成缩略图。它使用一些特定的逻辑创建缩略图,并且处理器非常昂贵。因此,Apache 将缩略图保存到磁盘,以便下次收到此缩略图的请求时,Varnish 可以将其直接重定向到 nginx。

这里有一个问题: Varnish 无法检查文件是否存在于文件系统中的某个位置,这就是为什么它不知道是否可以使用 nginx 后端或者 Apache 是否应该首先生成缩略图。

我目前采用的解决方法非常简单但很难看:

  1. Varnish 收到缩略图请求;
  2. Varnish 向 nginx 发送请求;
  3. 如果 nginx 找不到缩略图文件,它会回复 404 错误,并且 Varnish 会将请求重定向到 Apache。

虽然这个算法实际上看起来很简单,但事实并非如此。VCL 配置文件中需要以下实现:

  1. vcl_recv始终假设缩略图存在,如果不是从某个特殊主机请求,则所有请求都必须重定向到nginx
  2. vcl_fetchcatch 对象 HTTP 状态中,如果它是 404 并且资源是缩略图,则将主机重写为特殊主机并重新启动进程:

VCL:

也许有一些更好的方法来解决这个问题?我知道 Varnish 在 VCL 中支持 C,也许使用 C 代码检查文件是否存在更好?

0 投票
1 回答
1772 浏览

apache2 - N 个过期对象中的高 #。为什么?- (里面是我的 varnishstat 和 default.vcl)

我有运行 Varnich 2 的 apache2。我的问题是,即使我的缓存控制设置为 1 年,清漆仍然有 N 个过期对象1971的负载。这是我的 default.vcl,它显示了我的设置有什么提示吗?:

Varnishstat,这是我的输出:

如果这有帮助,这就是我在 apache2 conf 中设置缓存控制的方式:

无法弄清楚为什么我的 N 个过期对象如此之高?

0 投票
2 回答
2123 浏览

varnish - 如何在清漆中获取请求正文

我目前正在做一个基于清漆的项目..

我们写vclvmod。但是项目需要检查请求正文。如何获取发布请求正文VCLvmod使用C function?

0 投票
0 回答
1780 浏览

apache - Varnish MISS 缓存和 Varnish 控制终端在端口 6082 上的 192.168.56.102 没有响应

我在一个盒子(192.168.56.102)上使用清漆,在另一个盒子(192.168.56.105)上使用apache。在清漆盒上 - 在 /etc/varnish/default.vcl

和 /etc/default/varnish

问题 1. Varnish not Caching (MISS)

问题 2.varnish 控制终端在 apache(使用 drupal-pressflow-6)框上没有响应 - varnish admin (/admin/settings/varnish)

提前致谢

[编辑] - @casperOne - 你能确认你为什么关闭这个问题吗?我没有为我的问题找到任何有效的答案,这对我来说是一种耻辱

0 投票
1 回答
2264 浏览

varnish - 调试 VCL 文件的最佳方法是什么?

我在我的 VCL 文件中编写内联 C。更具体地说,我正在使用 Maxmind 的 GeoIP 数据库对访问者的 IP 进行地理编码。我已经安装了所有东西,我遵循了 GeoIP 数据库的所有 wiki 示例,并且一切正常。

除了返回国家/地区示例之外,我现在正在尝试使用 GeoIP 做一些魔术。我想使用返回指针的 GeoIP_record_by_addr() 方法返回访问者所在的城市。

问题:我似乎无法正确地将 GeoIPRecord* 转换为 char*。我已经尝试了几个小时。我让 Varnish 编译我的 VCL 文件而没有任何错误或通知,但 varnish 服务器以 403 响应。

问题:无论如何,我可以调试内联 C 或 403 清漆响应?

0 投票
2 回答
3653 浏览

varnish - 清漆 vcl_hash 以删除参数

我正在使用Varnish 2.0.6,但在找到编写 vcl_hash 函数的好文档时遇到了麻烦。

在缓存之前,我需要从我的 API 的 URL 中删除一些参数。特别是传递给跟踪分析但不更改结果的用户 ID。

我写了这个,但如果 vcl_hash 函数需要以 'hash' 或 'return(hash)' 或 NOTHING 结尾,并且我需要处理所有情况或只是我的特殊情况,这对我来说并不明确。我不清楚我是在覆盖方法还是在扩展它。

我有:

它缺少什么吗?