问题标签 [fastly]

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 回答
653 浏览

varnish - 用于更改 request.url 的 VCL Snippet

我正在尝试实现一个 VCL 片段(用于 Fastly Varnish 实现),它将在将请求代理到服务之前替换 URL。

例如。:

//domain.com/services/user/hello-world->//userservice/hello-world

为此,我写了这个:

这应该在后端获取之前应用,这样它不会对缓存或其他条件产生任何影响。根据文档,这应该放在里面vcl_pass。那是对的吗?vcl_fetch似乎为时已晚。

这在 Fastly 设置中编辑为:

在此处输入图像描述

这会生成以下vcl_pass代码:https ://gist.github.com/knyttl/ae1a3afbc219e311ace3d7d305f9142d

但是,它不起作用,因为目标后端接收到完整的、未修改的 url。我究竟做错了什么?这样做是vcl_pass正确的阶段吗?

0 投票
1 回答
281 浏览

cdn - 如果用户收到 50* 错误,如何强制 Fastly CDN 将请求重定向到单独的域?

当我们的 Fastly CDN 收到来自后端来源的 50* 错误时,我们想强制用户查看托管在子域上的状态页面吗?

有人可以提供任何帮助吗,我们已经阅读了这两篇文章,但它在我们头上:

https://docs.fastly.com/en/guides/creating-error-pages-with-custom-responses#creating-custom-responses-using-vcl-snippets

https://docs.fastly.com/en/guides/custom-responses-that-dont-hit-origin-servers

0 投票
0 回答
68 浏览

javascript - PHP 或 Javascript 中的 VCL Varnish randomint_seed 和 std.strtol

出于 AB 测试的目的,我们将用户 ID 的 unqiue 哈希生成到 VCL 中的存储桶值中(通过 Fastly CDN)。

这首先将用户 ID 散列为 MD5 字符串。然后是前 8 个字符。用于std.strtol将其转换为整数值的函数。然后将该值用作randomint_seeded函数的种子。

我们正在努力做与std.strtol任何randomint_seeded其他语言相同的功能(寻找 PHP 或 javascript)。我们需要在不同的语言中得到相同的结果。

对此有何建议?

0 投票
1 回答
229 浏览

magento2 - Magento 2 为不同的客户显示不同的价格导致 Fastly 出现问题

我只想为不同的客户显示不同的价格。但我不想让任何可缓存的块为假。问题是当客户加载类别页面然后它缓存生成并且缓存页面显示的所有客户。我为普通的magento FPC修复了这个问题。但是对于 Fastly 它不起作用,有什么想法吗?

0 投票
1 回答
126 浏览

google-cloud-storage - 来自 Google Cloud Storage 和 CDN 的音频流 - 费用

所以我正在制作一个应用程序,涉及来自谷歌云存储的流式音频(类似无线电),并正在调查成本。看起来它太贵了。

例如,假设我有 10MB 的音频文件,一个用户每天听 20 个文件,我有 2000 个活跃用户。那是 400GB 或 48 美元/天。即〜$ 1440 /月只是为此。

然后我考虑在它前面放置一个 CDN,以尽量减少从存储中直接读取。现在最初这对我来说是有意义的。CDN 会缓存音频文件,客户端大部分时间都会从缓存中获取文件。然而,当我查看 Fastly 的定价时(Fastly 是 Google 的合作伙伴,似乎很合适),我注意到他们似乎以与 Google 云完全相同的价格(0.12 美元/GB)为缓存的带宽使用定价。所以除非我读错了,否则建立 CDN 不会为我节省任何钱。现在我明白了为什么在它前面放置一个 CDN 可能是一个好主意还有其他原因,但我真的读对了吗?

另外,如果您对我应该如何设置它有任何其他提示,我会全神贯注。

0 投票
1 回答
20 浏览

web - qz.com在登录时如何显示缓存的内容?(没有Javascript)

因此,我最近再次探索了许多网站的基础架构,并开始非常仔细地检查 http 响应标头。

做了这么久,我感觉很明显,如果你登录到一个网站,它不能在显示动态内容的同时显示来自 Fastly 的缓存主文档页面。原来,我错了。

我认为这是可能的唯一方法是根据一些 cookie 提供缓存页面(我觉得我在某处读到它不安全,但如果我错了,请告诉我)

另外,我知道 qz.com 是一个 Javascript 应用程序,但我在禁用 Javascript 时发现了这个。当我禁用 Javascript 并在签名时浏览网站时,它仍然显示我已登录的指示符。禁用 cookie 后,登录指示符离开。

虽然我在登录后导航到新页面,但考虑到登录后年龄从 0 开始然后上升,看起来缓存只是根据您的 cookie 提供的。(我认为它重置)

如果不是这样,谁能告诉我如何做到这一点?

我已经阅读了这个https://www.section.io/docs/modules/varnish-cache/how-tos/dynamic-caching/我敢打赌答案写在这个文档/文章的某个地方。

谢谢!

0 投票
1 回答
94 浏览

amazon-web-services - 在 CDN 和 aws s3 对象上设置缓存标头有什么区别?

我试图弄清楚如何在不逐个清除的情况下清除一组 url(这是低效且有问题的)。

我还试图弄清楚如何在不清除我们不想清除的内容的情况下做到这一点。

本质上,当我将更新的文件推送到我的 CDN 指向的 s3 存储桶时,我想清除所有已更改的文件——但不清除保持不变的文件。

我试图弄清楚在 CDN 上设置缓存标头与设置缓存标头之间的区别(x-amz-meta-surrogate-key我认为具体是什么?)。

我能否以某种方式为更改的对象配置元数据(当我将它们推送到 s3 存储桶时),以便清除这些文件而不是其他文件?

(对于它的价值,我正在快速使用 CDN 服务)。

0 投票
1 回答
39 浏览

node.js - nodeJS 请求库:使用代理键而不是 URL 发出 POST 请求

我正在尝试使用 nodeJS 请求库发出 POST 请求,以通过 Fastly API 清除与某个代理键关联的内容。POST 请求看起来像这样:

我尝试在 node.JS 中以两种不同的方式做到这一点。

首先:

我明白了,Error: Invalid URI: /service/<fastly_Service_id>/purge/<surrogate_key>

我通过以下方式仔细检查了我的代理键curl -s -I -H "Fastly-Debug: 1" <URL corresponding to surrogate key> | grep surrogate-key

它返回我的代码中使用的相同代理键。

在第二次尝试中,我尝试了:

我得到错误,Error: options.uri is a required argument

0 投票
1 回答
55 浏览

pulumi - 通过 pulumi 创建 Fastly Service 时出现 Fastly 400 错误“exceeding_max_backends”

通过 pulumi 创建我的 Fastly Service 时,有时会收到 400 错误。错误消息如下。

我在其他 Fastly 服务中有超过 5 个后端,如果我重试部署,400 错误就会消失。有没有其他人遇到过这个错误?

0 投票
1 回答
245 浏览

varnish - 基于数据中心和缓存状态的 Fastly/Varnish 响应标头

我正在尝试创建一个 Varnish 响应标头,它可以帮助我调试缓存的状态。我想创建一个标头,显示请求经过的数据中心和对象的年龄。就像是:

这意味着该对象被缓存在VIE数据中心(屏蔽)中,并且FRA必须从VIE.

第二个请求将返回如下内容:

我试图设置这个:

这会起作用,但问题是:

  • beresp.http不能写入vcl_hit
  • obj.entered不可用vcl_fetch

所以基本上我似乎没有地方生成这个标题。

如何做到这一点?

编辑:

我设法在以下位置运行它vcl_deliver

得到:

它有两个问题:

  1. 进入(null)第一个电话 - 如果标题为空,有没有办法不预先添加标题?
  2. 边缘时间 (FRA) 永远不会改变并保持在0.001. 所以它似乎即使使用 obj.entered 也被缓存并且永远不会改变?