Google analytics Varnish在成功命中后返回未命中

Google analytics Varnish在成功命中后返回未命中,google-analytics,google-tag-manager,varnish,Google Analytics,Google Tag Manager,Varnish,我的应用程序使用清漆3.0.2。我在这里面临一个奇怪的问题。有些时候,页面是通过点击的方式从清漆中提供的。但在返回MISS后立即返回 我的印象是,一旦它从缓存中得到服务,它将继续这样做,直到TTL过期。我理解错了吗 以下是两个场景的两个响应头: 点击 HTTP/1.1 200 OK Server: Apache/2.4.16 (Unix) mod_auth_kerb/5.4 PHP/5.3.29 X-Powered-By: PHP/5.3.29 X-Drupal-Cache: MISS Cont

我的应用程序使用清漆3.0.2。我在这里面临一个奇怪的问题。有些时候,页面是通过点击
的方式从清漆中提供的。但在返回
MISS
后立即返回

我的印象是,一旦它从缓存中得到服务,它将继续这样做,直到
TTL
过期。我理解错了吗

以下是两个场景的两个响应头:

点击

HTTP/1.1 200 OK
Server: Apache/2.4.16 (Unix) mod_auth_kerb/5.4 PHP/5.3.29
X-Powered-By: PHP/5.3.29
X-Drupal-Cache: MISS
Content-Language: en
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
cache-control: max-age=86400, public
X-Cookie-Debug: Request cookie: 
X-Request-URL: /org/31633421?unit=31633421
Content-Length: 11986
Accept-Ranges: bytes
Date: Wed, 24 Apr 2019 14:26:43 GMT
X-Varnish: 330015711 330015651
Via: 1.1 varnish
Connection: keep-alive
X-Varnish-Cache: HIT
X-Varnish-Cache-Hits: 1
X-Varnish-Age: 188
X-Varnish-Leg: 128.87.225.172
X-Varnish-Cache-Version: 3.0.2
小姐

HTTP/1.1 200 OK
Server: Apache/2.4.16 (Unix) mod_auth_kerb/5.4 PHP/5.3.29
X-Powered-By: PHP/5.3.29
X-Drupal-Cache: MISS
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: public, max-age=300
Content-Language: en
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
X-Cookie-Debug: Request cookie: _gat_UA-15166137-36=1
X-Request-URL: /org/31633421?unit=31633421
Content-Length: 11978
Accept-Ranges: bytes
Date: Wed, 24 Apr 2019 14:23:52 GMT
X-Varnish: 1900997574
Via: 1.1 varnish
Connection: keep-alive
X-Varnish-Cache: MISS
X-Varnish-Age: 0
X-Varnish-Leg: 128.87.225.158
X-Varnish-Cache-Version: 3.0.2
我试图增加
TTL
值,删除所有cookies(包括谷歌分析),但它仍然表现得很突然

知道为什么吗

更新

在我的视图模板中包含以下Google Tag manager JS代码似乎就是这样

<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
      new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
      j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
      'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
      })(window,document,'script','dataLayer','GTM-XXX');</script>
(函数(w,d,s,l,i){w[l]=w[l]|【】;w[l]。推送({'gtm.start':
new Date().getTime(),事件:'gtm.js'});var f=d.getElementsByTagName[0],
j=d.createElement,dl=l!=“数据层”?“&l=”+l:“”;j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(窗口、文档、“脚本”、“数据层”、“GTM-XXX”);

根据两个响应头,我猜它来自两个不同的varnish服务器:

X-Varnish-Leg: 128.87.225.172


对于罗纳德,P> 1,也请考虑升级到最新的清漆6,因为光油3已经过去很多年,许多错误已经被修复和改进。此外,V3是生命的终结。

事实证明,这实际上是我使用的正则表达式的VCL配置中的一个问题。我没有考虑Google AnAnAnlytics cookie的非字母字符。将正则表达式修改为
\u[\ u\-\.\=a-zA-Z0-9]
,一切又变得有趣了


希望这对其他人有所帮助。

为什么两个响应中的缓存控制头不同?为什么一个响应有一个Expire头而另一个没有?这是因为我们有两个服务器分支,并且varnish安装在这两个分支中。因此,基于服务器负载,Varnish响应来自这两个服务器。但是它会影响到点击率吗?我的意思是,它可能不会显示一个或两个响应的命中率,但一旦缓存,它应该开始显示命中率。我的情况并非如此。命中率几乎为4:1。我还注意到了一件新的事情,如果我完全删除谷歌分析,varnish的工作就完美了。我已经在vcl中为GA cookies创建了异常。查看下面的评论。
set req.http.Cookie=regsuball(req.http.Cookie),(^ |\s*)(| | a-z]+| Drupal.visitor.name | WEBTRENDS | ID | WT | FPC | jsession ID | sirfetch | sso |隐藏|登录| ei session测试| ei session has | | has | js | BIGipServer[a-zA-z | 0-9]*),[)是的,实际上这个问题是针对我们的旧应用程序的,它本身就在一个旧的Drupal平台上。我们正在升级。在这个新的迭代中,我们使用了Varnish 4。快速提问,如果我们确实计划按照您的建议在这个新平台上将varnish从4升级到6,您认为它在配置语言更改方面会有多大的不同?从4升级到6比从3升级到4破坏性更小。VCL在4到6之间变化不大,您可以查看“升级VCL”部分:谢谢。尽管仍在等待我最初问题的答案:PRonald回答说:如果你有两个缓存,它们的缓存是不同步的(在开源版本中)
X-Varnish-Leg: 128.87.225.158