问题标签 [fastly-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 投票
1 回答
689 浏览

redirect - 用于 301 的快速 vcl 将混合大小写路径重定向到小写

自迁移以来,我的应用程序具有仍然链接到的混合大小写路径,但这些路径应该 301 重定向到所有小写路径。但是,出于遗留 api 和 graphql 查询的原因,有些路径仍需要以混合大小写形式存在。

我的问题的一个更详细但仍然简化的版本是:在我的 Fastly 配置中使用自定义 vcl,我如何 301 将所有混合大小写的 url 重定向为小写,但排除/apiand /graphql?我想我也想免除所有查询字符串和散列被小写。

我对 vcl 的熟悉程度非常低,肯定会欣赏一些例子!

更新:到目前为止,我有以下内容,但我对此并没有太大的信心:

0 投票
1 回答
494 浏览

varnish - 快速和/或通用清漆子程序请求流程

所以快速使用 varnish 2.1.5 的修改版本

它们不提供子程序请求流程的图表,但 varnish 提供(见下文)。

现在,根据下图,只有在执行withinvcl_hash时才会输入。但根据 Fastly 的一位工程师的说法……lookupvcl_recv

vcl_hash几乎在所有情况下都会执行(除非你restartvcl_recv

那么它是哪一个?有谁知道这是一个 Fastly 特定的实现,还是只是官方清漆图未指明的东西和/或是否有在另一个子例程完成时自动输入vcl_*子例程?

还有其他人知道的“陷阱”吗?

0 投票
1 回答
903 浏览

varnish - 如何在varnish-vcl中提取字符串的前n个字符?

我正在寻找一种从 VCL 中的字符串中提取前“n”个字符的方法。我在 VCL 文档中找不到像 trim(str,starting_pos) 或 substring(str,len) 这样的函数。我试过在 google 和 stackoverflow 上搜索这个,但什么也没出现,所以我在这里问。我感谢您的帮助。

0 投票
1 回答
392 浏览

varnish - 在 Varnish VCL 中访问后端响应的主体

我的 Varnish VCL 代码需要向后端系统发出一个简单的 GET 请求,并确定请求的资源是否可访问。不幸的是,后端系统总是返回 200,我必须检查响应的实际正文才能做出决定。

有没有办法在 VCL 中访问响应正文(小于 1KB)并对其进行子字符串搜索?

我试图避免仅为此功能实施代理服务。

PS 现在我必须坚持使用 Varnish 2.1(快速)

0 投票
1 回答
421 浏览

jwt - 如何在配置 Fastly CDN 时修复 Varnish VCL 中未终止的短字符串错误

我正在尝试使用 Varnish VCL 在 Fastly CDN 上设置基于令牌的身份验证,并使用此示例 VCL 片段在此处生成和验证 JWT 令牌 -

现在,当我尝试编译它时,它会返回 -

看起来我在合成块期间没有以某种方式正确地转义这些值。

我尝试在 vcl_recv 子例程中添加此合成块的唯一原因是因为我想测试摘要如何生成 JWT 令牌并对其进行验证,并且我想在 Node.Js 的服务器端创建类似的 JWT 令牌所以我试图输出令牌的不同中间部分进行调试。

我对 Varnish 的语法和语义不太熟悉,但我仍然寻求帮助来查找有关此调度子例程的任何文档,但到目前为止还没有找到。

那么,任何人都可以帮助解决这个问题,并让 vcl_recv、vcl_error 在 json 响应中插入不同的中间值。

我尝试使用一些基于 Node.Js 的 base64 url​​ 解码库来解码返回的令牌部分,并且能够解码标头和有效负载部分,但我无法从 Node.Js 生成签名部分。那么,任何人都可以建议 node.js 或任何 javascript 库中 base64url_nopad() 的等价物吗?

对于 hmac_256 加密部分,我们正在尝试使用加密库并创建一个 hmac,例如 crypto.createHmac('sha256', 'SupSecretStr').update().digest('hex'); 但是我认为js中的所有base64编码url库都会返回填充url,这就是为什么这个hmac 256摘要的base64编码部分与用清漆生成的不匹配的原因

0 投票
1 回答
138 浏览

varnish-vcl - 使用 Fastly CDN 将动态 CSS URL 放入 HTTP 标头

我正在为缓存清除生成动态 CSS URL。即它们的格式为styles-thisisthecontenthash123.css.

我还想使用 HTTP Link 标头来稍微更快地加载文件。即有标题Link: <styles-thisisthecontenthash123.css>; rel=stylesheet

我很确定在 Fastly 中使用 VCL 可以做到这一点,但我对生态系统还不够熟悉,无法弄清楚。CSS URL 在 中index.html,已缓存。我想我可以打开index.html并使用正则表达式来解析 CSS URL。我该怎么做?

0 投票
1 回答
61 浏览

routing - 快速:根据路径参数路由 n% 的流量

当我不想全面推出新功能时,有一个有趣的任务。我只想将流量百分比(基于路径参数)路由到新端点。

我想根据“specialPathParam”计算百分比:ourservice.com/one/'specialPathParam'/something。

因此,如果我们想将 50% 路由到新端点:

如果有 2 个请求 ourservice.com/one/'specialPathParamOne'/something ourservice.com/one/'specialPathParamTwo'/something ,

一个带有“specialPathParamOne”的请求应该发送到新端点,另一个带有“specialPathParamTwo”的请求应该发送到旧端点。

试图找到一种在 VCL 中以某种方式实现它的方法......

这里有什么提示和技巧吗?非常感谢!

0 投票
1 回答
494 浏览

varnish - VCL 返回(查找)

我们正在使用 Fastly 及其 Varnish 从我们的服务中传递内容。为了在多个服务之间分发内容,我们使用以下代码段:

这有效并允许我们交付/services/user/get到服务的/get端点user

然而,使用这个 Snippet 可以让 Fastly 完全跳过gzip压缩。这可以通过使用来解决return(lookup)

此时gzip压缩正在工作。不幸的是,这使得所有POST, PATCH,DELETE请求都以GET.

我尝试研究 Varnish 文档,但不确定是否(lookup)真的是我需要的领域。你能引导我了解这应该如何实施吗?

0 投票
1 回答
49 浏览

varnish - Varnish 2.x 的“禁止”替代方案

我们在Varnish 4.x中使用以下代码:

现在我们正在转向使用Varnish 2.x的 Fastly ,所以我们没有得到在 Varnish 2.x 中禁止的替代方案

0 投票
1 回答
57 浏览

varnish - 使用 Varnish regex 推送 http2 所有 css 资产文件

我正在使用 Varnish(快速)和 http2 来推送cssjs文件。我想推送所有css, js,png文件。

我当前的配置仅从给定路径推送指定的文件:

是否可以配置 VCL 文件以便推送所有样式表、javascript 和图像?

我试图设置这样的东西,但没有运气。