gpt4 book ai didi

varnish - VCL 返回(查找)

转载 作者:行者123 更新时间:2023-12-03 17:46:12 25 4
gpt4 key购买 nike

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

    sub vcl_recv {
#FASTLY recv
if (req.url.path ~ "^/services/") {
set req.url = regsub(req.url, "/services/(.*?)/", "/");
}
}
这有效并允许我们提供 /services/user/get/get user 的端点服务。
但是,使用此代码段会使 FaSTLy 完全跳过 gzip压缩。使用 return(lookup) 可以解决此问题:
    sub vcl_recv {
#FASTLY recv
if (req.url.path ~ "^/services/") {
set req.url = regsub(req.url, "/services/(.*?)/", "/");
}
return (lookup);
}
此时 gzip压缩正在工作。不幸的是,这使得所有 POST , PATCH , DELETE请求以 GET 的形式到达.
我试图研究 Varnish 文档,但我不确定是否 (lookup)确实是我需要的领域。你能引导我了解这应该如何实现吗?

最佳答案

内置VCL
Varnish 使用内置的 VCL 创建一组通用规则。它们充当最终用户的安全网。
https://github.com/varnishcache/varnish-cache/blob/master/bin/varnishd/builtin.vcl对于内置 VCL。
此代码和此文件不应由您加载,而是在您未在其中一个子例程中执行显式返回语句时自动执行。
任何显式的 return 语句都将绕过默认行为。有时这是自定义 Varnish 的行为所必需的。但有时它会适得其反并导致不良行为。
您的 return(lookup) 的后果陈述sub vcl_recv {}负责处理传入请求的子例程执行无条件的 return(lookup) .
这意味着每个请求都会导致缓存查找,即使内置 VCL 宁愿将这些请求直接传递到后端。
有两种策略来决定缓存:

  • 定义可以缓存的规则并执行return(pass)所有其他请求
  • 定义不能缓存的规则并执行 return(lookup)所有其他请求

  • 基本上这是一个黑名单/白名单之类的东西。
    GET & HEAD 与其他请求方法
    内置 VCL 只允许 GETHEAD请求被缓存。其他请求方法,例如 POST , 表示将发生统计变化。这就是为什么它们没有被缓存。
    如果您尝试执行 return(lookup)对于 POST调用,Varnish 会在内部将此请求更改为 GET .
    有办法缓存 POST电话,但一般来说你不应该那样做。
    你应该如何构建你的 sub vcl_recv {}我建议您删除 return(lookup)来自您的 sub vcl_recv {} 的声明子程序。
    如前所述,一旦您退出自定义 sub vcl_recv {},内置 VCL 就会接管。 .
    但是,内置的 VCL 不会很有帮助,因为您的网站可能有一些 cookie。
    以合理的方式剥离 cookie 并为需要 cookie 的请求保留它们很重要。对于这些页面, return(pass)将插入以确保这些个性化请求不会在缓存中查找,而是直接传递给后端。
    gzip呢?
    可以找出 gzip 停止工作的原因。 varnishlog工具允许您自省(introspection)正在运行的系统并过滤掉日志。
    https://feryn.eu/blog/varnishlog-measure-varnish-cache-performance/对于我写的关于这个主题的一篇广泛的博客文章。
    也许 varnishlog可以帮助您找到 gzip 压缩在某些时候停止工作的原因。

    关于varnish - VCL 返回(查找),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65150338/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com