apache - 清漆、SSL 和 HTTP 标头 - 使用 SSL 重新加载后没有 X-Cache?
问题描述
我注意到我的 Varnish/Apache 设置有一个奇怪的行为,这让我想知道这些页面是否在任何时候都被正确缓存了。
我在同一台机器上的 8080 端口和 80 端口上运行 Apache。此外,我正在使用 Apache 与 Varnish 进行 SSL 终止,如本文所述
我正在测试以四种不同的方式打开网页,我希望 HTTP X-Cache 标头出现在所有四个实例中,以证明 varnish 正常运行:
- 使用 http(端口 80)调用新页面或使用强制重新加载强制新副本以获取状态 200 OK
- 在端口 80 (http) 中再次调用同一页面,只需重新加载即可获得 HTTP 状态 304 未修改
- 使用 https(端口 443)调用页面并强制状态 200 ok 并强制重新加载
- 使用 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 提供?
解决方案
标头不同,因为它是 304 http 响应,这意味着文件不会再次传输并直接从浏览器缓存中传递,因此您没有 Varnish 标头。但是我不知道为什么没有 SSL 的第一次重新加载有 Varnish 标头。
另一件事,你应该使用Hitch作为 ssl 代理,它比 Apache 好很多,而且它使用的 PROXY 协议有几个优点。
推荐阅读
- javascript - JavaScript 将别名重定向到域
- c++ - 这里的以下 oop 结构是什么?
- javascript - Firestore 未写入所有文档
- accelerometer - 在 SPI 中将 ICM20948 与 STM32F446RE HAL 层接口
- http - 当我在飞镖中收到异常消息时,为什么会收到“异常:”?
- python - 将 JSON 列表转换为 pandas 数据框
- node.js - 如何从nodejs中的json对象获取值
- javascript - 如何在 ReactJS 中获取内部 API 数据?
- json - 使用 Goodreads API 时出现 json.decoder.JSONDecodeError
- python - 制作实时处理数据的动画时间序列图