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

drupal - 如果启用可永久缓存复选框,CDN Farfuture URL 无法快速使用

非常感谢您对我的询问的回复,我想在#1 上再问您一点。以下是我的查询/问题的详细信息:

在第 1 点,我们可以在响应头中看到这是“x-cache: MISS”;我们在第一次请求给定 URL 时会得到相同的行为,因此它似乎不是缓存响应。这是一个现有的站点;我们仅在启用 Fastly 域和 farfuture 功能的组合时才看到此问题。看起来 Drupal 可能会发出 302 重定向,可能是到站点的根目录,但我不知道我们如何验证这一点。下面是我们从 Drupal 配置文件系统的设置: 公共文件系统路径 sites/us/files 公共文件基本 URL https://origin-domain.com/us/sites/us/files 这里有四种不同的请求方式图片; 只有上面提到的组合失败(即获得 302 重定向):工作: https://origin-domain.com/us/cdn/farfuture/7fPXsGzPQo7CUdilOBMTARjP_snit ...不工作: https ://cdn-domain.com/us/cdn/farfuture/7fPXsGzPQo7CUdilOBMTARjP_snit7D3 ...工作: https://origin -domain.com/us/sites/us/files/coperta_30.jpg 工作: https ://cdn-domain.com/us/sites/us/files/coperta_30.jpg

兄弟,卡皮尔 P

0 投票
1 回答
95 浏览

varnish - 如何将部分 URL 复制到重定向路径

我正在尝试将路径重定向www.something.com/apple/piewww.something.com/tickets/pie-details

这是我尝试过但不起作用的方法:

我错过了什么吗?

0 投票
2 回答
228 浏览

varnish - 如何使用 Varnish 添加重定向异常?

我正在尝试将路径例如 www.something.com/apple/pie 重定向到 www.something.com/tickets/pie-details 但也有一些例外情况,例如 www.something.com/apple/helloworld 不会被重定向到 www .something.com/tickets/helloworld-details

这是我尝试过但不起作用的方法:

0 投票
2 回答
709 浏览

cdn - 提供“陈旧”内容的 CDN 支持/配置,在后台刷新

目标

无论多么陈旧,始终从 CDN EDGE 缓存中提供内容。尽可能在后台刷新它。

问题

我有一个NextJS应用程序,它在服务器端呈现一些 React 组件并将它们传递给客户端。对于这个讨论,让我们只考虑我的主页,它是未经身份验证的,对每个人来说都是一样的。

我想要的是将服务器呈现的主页缓存在 CDN 的 EDGE 节点上,并尽可能频繁地或总是从该缓存中向终端客户端提供服务。

根据我的阅读,正确支持缓存相关标头设置的 CDN(如 Fastly)Surrogate-Control应该Cache-Control: stale-while-revalidate能够做到这一点,但实际上,我并没有看到它像我期望的那样工作。我看到的是:

  • 当先前的请求应该对其进行预热时,请求会错过缓存并返回原点
  • 请求从缓存中提供,但在源发布新内容时永远不会更新

例子

考虑以下时间表:


[T0] - 访问者 1 请求www.mysite.com- CDN 缓存完全冷,因此请求必须返回我的源 (AWS Lambda) 并重新计算主页。返回一个带有标题Surrogate-Control: max-age=100和的响应Cache-Control: public, no-store, must-revalidate。然后访问者 1 被提供主页,但他们不得不等待高达 5 秒!呸!愿没有其他访客遭受同样的命运。

[T50] - 访问者 2 请求www.mysite.com- CDN 缓存包含我的文档并立即将其返回给访问者。他们只需要等待 40 毫秒!惊人的。在后台,CDN 从我的源站重新获取最新版本的主页。原来它没有改变。

[T80] -www.mysite.com将新内容发布到主页,使任何缓存的内容真正过时。该网站的 V2 现已上线!

[T110] - 访问者 1 返回www.mysite.com- 从 CDN 的角度来看,距离访问者 2 的请求仅 60 秒,这意味着访问者 2 发起的后台刷新应该会导致缓存中主页的一个 <100 秒的陈旧副本(尽管是 V1,而不是 V2 , 主页)。访问者 1 从缓存中获取 60 年代陈旧的 V1 主页。这次Visitor1的体验要好得多!本次请求发起后台刷新CDN缓存中的陈旧内容,本次origin返回网站V2(30s前发布)。

[T160] - 访客 3 访问www.mysite.com- 尽管是新访客,但 CDN 缓存现在从访客 1 最近触发的后台刷新中恢复。为访问者 3 提供一个缓存的 V2 主页。

...

只要每 100 秒至少有 1 位访问者访问我的网站(因为max-age=100),没有访问者会遭受到我的原点的完整往返等待时间。


问题

1.这是对现代 CDN 的合理要求吗?我无法想象这比总是返回原点(没有 CDN 缓存)更费力,但我一直在努力从任何 CDN 提供商那里找到有关正确方法的文档。我现在正在使用 Fastly,但我也愿意尝试其他任何方法(我先尝试了 Cloudflare,但读到他们不支持stale-while-revalidate

2.什么是正确的标题?(假设 CDN 提供商支持它们)我在 FastlySurrogate-Control: maxage=<X>Cache-Control: public, s-maxage=<X>, stale-while-revalidateCloudflare 中都玩过,但似乎没有一个正确地做到这一点(在 maxage 时间范围内很好地请求不要拾取源上的更改,直到出现缓存未命中)。

3.如果不支持,是否有 API 调用可以让我将内容更新推送到我的 CDN 的缓存层,有效地说“嘿,我刚刚发布了这个缓存键的新内容。就在这里!”

我可以使用 Cloudflare 工作人员使用他们的 KV 存储来实现这种自己的缓存,但我认为在为似乎很常见的问题实现代码解决方案之前,我需要做更多的研究。

提前致谢!

0 投票
1 回答
476 浏览

cloudflare - 使用 Fastly 或 Cloudflare 进行云运行

当我想将自定义域映射到我的云运行服务时。这是我需要通过 CNAME 记录做的一次性事情吗?或者这是否在持续的基础上得到验证?

我想要一个来自 Fastly 的 CNAME 记录来保护我的 Cloud Run 服务。相同的功能适用于 Cloudflare,其 DNS 记录(无代理)指向 Cloud Run 服务,然后启用代理功能。一切似乎都很好(使用 Cloudflare),但我不知道这是否会在未来中断?我也希望能够为 Fastly 做同样的事情

0 投票
1 回答
1098 浏览

regex - 根据条件从 GraphQL 中删除空格和换行符

我正在尝试从我的 GraphQL 查询中删除额外的空格和换行符,但过滤器参数中两个双引号之间的数据应该保持不变。

以下是我们 fastly 的 CDN 上接收查询的方式

目标是

  • 从查询中删除多余的空格
  • 两个双引号之间的空格应该在 graphql 查询中保持不变(因为过滤器参数的值将用于匹配我们数据库中的记录)

我们尝试了以下方法:

  • \s+(?=(?:['|%22](?:\\['|%22]|[^'|%22])+['|%22]|[^'|%22])+$)快速文档中给出
  • \s+(?=([^"]*"[^"]*")*[^"]*$)

但这似乎不起作用。

0 投票
1 回答
341 浏览

firebase - 无法在 Firebase 托管后面调用 Google Cloud Function - 状态 503,但状态页面上没有指示

我在访问通过 Firebase 托管公开的 Google Cloud HTTP 函数时遇到问题。我认为 CDN 存在问题,因为功能没有改变,但我在状态页面上看不到任何内容:

直接访问该功能,即不是通过 Firebase 托管而是使用https://{region}{app}.cloudfunctions.net/{name}URL 似乎遇到了同样的问题。

最初,我在将近两分钟后收到了这个回复

这似乎表明 Fastly 存在问题(列为Firebase 的子处理器),但他们的状态页面显示一切正常。

一段时间后,我似乎在 15-30 秒超时后收到了另一方的回复:

(为了便于阅读,去掉了 HTML)

当然,等待 30 秒也无济于事。

在云功能日志中,我确实看到一些请求通过并在 400-500 毫秒之间进行正常执行。我可以看到一次“崩溃”在 54 毫秒内完成,两次更长的执行时间在 20 秒左右,一次超时(60 秒)。该函数用作自定义身份验证过程的一部分,因此通常会有很多请求。

关于我可以做些什么来理解问题所在有什么建议吗?或者是一个状态页面,它实际上可以告诉我在哪里可以查找问题?

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

heroku - 快速 CDN Heroku url 重定向

我最近从 Heroku 应用程序的插件中添加了 Fastly 域。当快速配置时,我得到了一个测试 url,如下所示:

https://felix-homes-herokuapp-com.global.ssl.fastly.net/

每当我点击此网址时,它都会被重定向到

https://felix-homes.herokuapp.com出于某种未知原因。

请注意,我的 nodejs 应用程序使用 Heroku-SSL-Redirect。是不是因为这个?

我已经按照设置指南向支持人员询问了多个问题

https://support.fastly.com/hc/en-us/requests/323620?page=1

我发现最接近 SO 的问题是

快速添加到 Heroku 应用程序不会转发到正确的 url

清除浏览器缓存或更改浏览器对我没有帮助。您能否尝试在您的计算机上快速点击 url,如果您也面临同样的重定向问题,请告诉我?