我认为 Varnish 删除了我的查询字符串参数

我认为 Varnish 删除了我的查询字符串参数

根据是否使用特定的查询字符串,我们的 WordPress 网站的每个页面和帖子都有多个视图。

例如,如果访问example.com/blog-post-with-chart(包含图表作为正文内容的页面),您将看到整个页面。导航栏、内容、页脚……一切。

然而,如果你去example.com/blog-post-with-chart/?查看=嵌入那么除了图表之外的所有内容都会被删除。所以您只能看到图表。其他网站可能会这样嵌入我们的图表。

WordPressget_query_var('view')没有返回任何内容。我还尝试过仅使用 var_dump 或 print_r $_GET 超全局变量,但也没有显示任何内容。

我注意到,只有当“view”是第一个查询字符串参数时,这才不起作用。所以如果我的 URL 是example.com/blog-post-with-chart/?fake=arg&view=embed那么图表视图将按预期工作。

看起来 Varnish 正在删除传递给服务器的查询参数。如果我添加查询参数“nocache”,那么一切都会按预期进行。这是因为我有一个 Vanish 规则:

            if (req.url ~ "nocache") {
                set req.backend = default;
                return(pass);
            }

作为一种解决方法,我添加了一条新规则,如果 URL 包含以下内容,则绕过缓存视图=

            if ( req.url ~ "view=" ) {
                set req.backend = default;
                return(pass);
            }

但是我怎样才能阻止 Varnish “丢弃”查询参数呢?我们肯定希望缓存该页面,并且我们还希望它与查询字符串一起缓存,以便始终缓存嵌入视图。

编辑-这是我正在使用的 VCL 文件: https://gist.github.com/kyle-jennings/589e513808fa83b93a27d1cf3c10c642

答案1

如果查询字符串开头有“view”,则基本上要求 varnish 清理每个查询参数:

      if (req.url ~ "\?(utm_(campaign|medium|source|term)|adParams|client|cx|eid|fbid|feed|ref(id|src)?|v(er|iew))=") {
                set req.url = regsub(req.url, "\?.*$", "");
      }

因此...它符合

相关内容