首页 > 解决方案 > 清漆、SSL 和 HTTP 标头 - 使用 SSL 重新加载后没有 X-Cache?

问题描述

我注意到我的 Varnish/Apache 设置有一个奇怪的行为,这让我想知道这些页面是否在任何时候都被正确缓存了。

我在同一台机器上的 8080 端口和 80 端口上运行 Apache。此外,我正在使用 Apache 与 Varnish 进行 SSL 终止,如本文所述

我正在测试以四种不同的方式打开网页,我希望 HTTP X-Cache 标头出现在所有四个实例中,以证明 varnish 正常运行:

  1. 使用 http(端口 80)调用新页面或使用强制重新加载强制新副本以获取状态 200 OK
  2. 在端口 80 (http) 中再次调用同一页面,只需重新加载即可获得 HTTP 状态 304 未修改
  3. 使用 https(端口 443)调用页面并强制状态 200 ok 并强制重新加载
  4. 使用 https 重新加载页面并获得状态 304。

我正在使用 Chrome DevTools 来检查标题。结果如下:

选项 1:强制刷新页面,http

HTTP/1.1 200 OK
Date: Fri, 15 Mar 2019 22:00:10 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.5.38
X-Content-Type-Options: nosniff
X-Powered-By: PHP/5.5.38
X-Drupal-Cache: MISS
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: public, max-age=21600
X-Content-Type-Options: nosniff
Content-Language: de
X-Frame-Options: SAMEORIGIN
X-UA-Compatible: IE=edge,chrome=1
Last-Modified: Fri, 15 Mar 2019 22:00:10 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
X-Varnish: 323946989 325583205
Age: 2444
Via: 1.1 varnish-v4
X-Cache: HIT
X-Cache-Hits: 235
Content-Length: 39753
Connection: keep-alive
Accept-Ranges: bytes

选项 2:重新加载页面,http

HTTP/1.1 304 Not Modified
Date: Fri, 15 Mar 2019 22:00:10 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.5.38
X-Content-Type-Options: nosniff
X-Powered-By: PHP/5.5.38
X-Drupal-Cache: MISS
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: public, max-age=21600
X-Content-Type-Options: nosniff
Content-Language: de
X-Frame-Options: SAMEORIGIN
X-UA-Compatible: IE=edge,chrome=1
Etag: "1552687210-1"
Last-Modified: Fri, 15 Mar 2019 22:00:10 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
X-Varnish: 195923610 325583205
Age: 2616
Via: 1.1 varnish-v4
X-Cache: HIT
X-Cache-Hits: 250
Connection: keep-alive

选项 1:强制刷新页面,https

HTTP/1.1 200 OK
Date: Fri, 15 Mar 2019 22:00:10 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.5.38
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: public, max-age=21600
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
X-Powered-By: PHP/5.5.38
X-Drupal-Cache: MISS
X-Content-Type-Options: nosniff
Content-Language: de
X-Frame-Options: SAMEORIGIN
X-UA-Compatible: IE=edge,chrome=1
Etag: "1552687210-1"
Last-Modified: Fri, 15 Mar 2019 22:00:10 GMT
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
X-Varnish: 482447464 325583205
Age: 1410
Via: 1.1 varnish-v4
X-Cache: HIT
X-Cache-Hits: 146
Content-Length: 39753
Accept-Ranges: bytes

选项 4:页面重新加载,https

HTTP/1.1 304 Not Modified
Date: Fri, 15 Mar 2019 22:00:10 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.5.38
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
Etag: "1552687210-1"
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: public, max-age=21600
Vary: Accept-Encoding

为什么最后一个请求中的标头完全不同?我如何检查页面是否真的由 Varnish 提供?

标签: apachesslcachinghttp-headersvarnish

解决方案


标头不同,因为它是 304 http 响应,这意味着文件不会再次传输并直接从浏览器缓存中传递,因此您没有 Varnish 标头。但是我不知道为什么没有 SSL 的第一次重新加载有 Varnish 标头。

另一件事,你应该使用Hitch作为 ssl 代理,它比 Apache 好很多,而且它使用的 PROXY 协议有几个优点。


推荐阅读