问题标签 [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.
http - 如果 Varnish 从主服务器获得 404,是否可以将其配置为尝试使用第二台服务器获取某些资源?
这对我来说是一个完美的解决方案,因为我需要为 Web 浏览器提供一些生成的内容。我的计划是按需生成内容并将其存储以备下次使用。我不希望浏览器每次都调用我的服务(生成内容)。如果可用,我希望他们直接转到“缓存”资源,如果不可用,则只调用该服务。因此,我将 Varinsh 放在运行服务的服务器 A 和存储先前生成的内容版本的服务器 B 前面。如果它收到对尚未缓存的资源的请求,它将尝试服务器 B。在收到 404 响应后,它将从服务器 A 请求相同的资源。
Varnish可以用VCL这样配置吗?如果没有,是否有您知道的类似解决方案?
PS 我不想将 302 重定向发送到浏览器,而且我无法控制服务器 B 以使其发送此类重定向而不是 404
varnish - 有人可以告诉我如何解决这个清漆错误吗?
这是我得到的错误:
来自 VCC 编译器的消息:
未终止的字符串
(输入第 39 行,第 19 行)
------------------################################ #############
运行 VCC-compiler 失败,退出 1 VCL 编译失败
这是default.vcl
regex - 负载均衡器后面的清漆不缓存内容
我正在使用这一行来删除 cookiedefault.vcl
以允许 Varnish 缓存
但它似乎不起作用。
Varnish 在负载均衡器后面,负载均衡器设置了一个持久性 cookie,它以这种格式出现在标头中:
我在模拟器中运行了这个正则表达式,它捕获了上面的行(直到第一个“;”)。所以我认为这个正则表达式应该抓住它,但它似乎没有?当我绕过这个负载均衡器时,内容会被缓存。
有任何想法吗?我错过了什么?
list - 在 VCL(Varnish 配置语言)中定义列表
有没有办法用 Varnish VCL 语言定义域列表?我想 ACL 也有类似的东西。我想做这样的事情(以 ACL 为例)。
我可以只使用单独的 RegEx 测试,但如果我想在 VCL 的其他地方使用这些域,它就不是很可重用。
谢谢!
apache - 根据请求的文件是否存在通过 Varnish 在后端之间进行选择的好方法
我在上面安装了 Apache2、nginx 和 Varnish。Varnish 接收请求,确定它用于什么后端(静态到 nginx,动态到 Apache),从后端获取响应并在需要时缓存它。
除其他外,Apache 会生成缩略图。它使用一些特定的逻辑创建缩略图,并且处理器非常昂贵。因此,Apache 将缩略图保存到磁盘,以便下次收到此缩略图的请求时,Varnish 可以将其直接重定向到 nginx。
这里有一个问题: Varnish 无法检查文件是否存在于文件系统中的某个位置,这就是为什么它不知道是否可以使用 nginx 后端或者 Apache 是否应该首先生成缩略图。
我目前采用的解决方法非常简单但很难看:
- Varnish 收到缩略图请求;
- Varnish 向 nginx 发送请求;
- 如果 nginx 找不到缩略图文件,它会回复 404 错误,并且 Varnish 会将请求重定向到 Apache。
虽然这个算法实际上看起来很简单,但事实并非如此。VCL 配置文件中需要以下实现:
vcl_recv
始终假设缩略图存在,如果不是从某个特殊主机请求,则所有请求都必须重定向到nginx;- 在
vcl_fetch
catch 对象 HTTP 状态中,如果它是 404 并且资源是缩略图,则将主机重写为特殊主机并重新启动进程:
VCL:
也许有一些更好的方法来解决这个问题?我知道 Varnish 在 VCL 中支持 C,也许使用 C 代码检查文件是否存在更好?
apache2 - N 个过期对象中的高 #。为什么?- (里面是我的 varnishstat 和 default.vcl)
我有运行 Varnich 2 的 apache2。我的问题是,即使我的缓存控制设置为 1 年,清漆仍然有 N 个过期对象1971的负载。这是我的 default.vcl,它显示了我的设置有什么提示吗?:
Varnishstat,这是我的输出:
如果这有帮助,这就是我在 apache2 conf 中设置缓存控制的方式:
无法弄清楚为什么我的 N 个过期对象如此之高?
varnish - 如何在清漆中获取请求正文
我目前正在做一个基于清漆的项目..
我们写vcl
和vmod
。但是项目需要检查请求正文。如何获取发布请求正文VCL
或vmod
使用C function
?
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 - 你能确认你为什么关闭这个问题吗?我没有为我的问题找到任何有效的答案,这对我来说是一种耻辱
varnish - 调试 VCL 文件的最佳方法是什么?
我在我的 VCL 文件中编写内联 C。更具体地说,我正在使用 Maxmind 的 GeoIP 数据库对访问者的 IP 进行地理编码。我已经安装了所有东西,我遵循了 GeoIP 数据库的所有 wiki 示例,并且一切正常。
除了返回国家/地区示例之外,我现在正在尝试使用 GeoIP 做一些魔术。我想使用返回指针的 GeoIP_record_by_addr() 方法返回访问者所在的城市。
问题:我似乎无法正确地将 GeoIPRecord* 转换为 char*。我已经尝试了几个小时。我让 Varnish 编译我的 VCL 文件而没有任何错误或通知,但 varnish 服务器以 403 响应。
问题:无论如何,我可以调试内联 C 或 403 清漆响应?
varnish - 清漆 vcl_hash 以删除参数
我正在使用Varnish 2.0.6,但在找到编写 vcl_hash 函数的好文档时遇到了麻烦。
在缓存之前,我需要从我的 API 的 URL 中删除一些参数。特别是传递给跟踪分析但不更改结果的用户 ID。
我写了这个,但如果 vcl_hash 函数需要以 'hash' 或 'return(hash)' 或 NOTHING 结尾,并且我需要处理所有情况或只是我的特殊情况,这对我来说并不明确。我不清楚我是在覆盖方法还是在扩展它。
我有:
它缺少什么吗?