#apache #ssl #caching #http-headers #varnish
#apache #ssl #кэширование #http-заголовки #varnish
Вопрос:
Я заметил странное поведение моей настройки Varnish / Apache, что заставляет меня задуматься, правильно ли кэшируются страницы в любое время или нет.
Я запускаю Apache на порту 8080 и Varnish на порту 80 на одном компьютере. Также я использую Apache для завершения SSL с помощью Varnish, как описано в этой статье
Я тестирую открытие веб-страницы четырьмя различными способами, и я ожидаю, что заголовки 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?
Ответ №1:
Заголовок отличается тем, что это http-ответ 304, это означает, что файл не передается повторно и доставляется напрямую из кэша вашего браузера, поэтому в нем нет заголовков Varnish. Однако я не знаю, почему при первой перезагрузке без SSL заголовки Varnish.
Другое дело, вам следует использовать Hitch в качестве ssl-прокси, для этого он намного лучше Apache и использует ПРОКСИ-протоколы, которые имеют несколько преимуществ.