В моем приложении используется Varnish 3.0.2. Я столкнулся со странной проблемой здесь. Иногда страницы подаются из Varnish со знаком HIT. Но сразу после этого возвращается 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, удалить все файлы cookie (включая Google Analytics), но все равно он ведет себя резко.
Есть идеи, почему?
Обновлять
Похоже, это происходит из-за включения следующего кода JS диспетчера тегов Google в мой шаблон представления.
<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>





Я предполагаю, что это исходит от двух разных серверов лака на основе двух заголовков ответов:
X-Varnish-Leg: 128.87.225.172
а также
X-Varnish-Leg: 128.87.225.158
Это потому, что у нас есть две серверные ножки и на обеих установлена лакировка. В результате ответ Varnish поступает от них обоих в зависимости от нагрузки на сервер. Но может ли это повлиять на HIT? Я имею в виду, что он может не показывать HIT для одного или двух ответов, но как только он будет кэширован, он должен начать показывать HIT. В моем случае этого не происходит. Соотношение попаданий и промахов почти 4:1. Также заметил новую вещь, если вообще убрать гугл аналитику, лак работает все идеально. Я создал исключение для файлов cookie GA, хотя в vcl. Проверьте комментарий ниже.
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|Drupal.visitor.name|WEBTRENDS_ID|WT_FPC|JSESSIONID|sifrFetch|sso_hide_login|ei_session_test|ei_session|has_js|BIGipServer[a-zA-Z_0-9]*)=[^;]*", "");+1 для Рональда, также, пожалуйста, подумайте об обновлении до последней версии Varnish 6, поскольку с момента выпуска Varnish 3 прошли годы, было исправлено множество ошибок и внесены улучшения. Кроме того, V3 является концом жизни.
Да, на самом деле этот вопрос касается нашего старого приложения, которое само находится на старой платформе Drupal. Мы обновляем это. В этой новой итерации мы использовали Varnish 4. Тем не менее, короткий вопрос: если мы действительно планируем обновить Varnish на этой новой платформе с 4 до 6, как вы предлагаете, насколько, по вашему мнению, изменится язык конфигурации?
Переход с 4 на 6 менее разрушительный, чем переход с 3 на 4. VCL не сильно меняется с 4 на 6, вы можете посмотреть раздел «обновление VCL»: docs.varnish-software.com/varnish-cache-plus/upgrading/…
Спасибо за это. Хотя все еще жду ответа на свой первоначальный вопрос. :П
На него Рональд ответил: если у вас два кеша, то их кеши не синхронизируются (в версии с открытым исходным кодом)
Оказывается, на самом деле проблема была в конфигурации VCL с регулярным выражением, которое я использовал. Я не учел не-альфа-символы файла cookie Google Analytics. Изменил регулярное выражение на _[_\-\.\=a-zA-Z0-9] и снова все весело!
Надеюсь, это поможет кому-то.
Почему заголовки управления кешем различаются в двух ответах? Почему в одном ответе есть заголовок Expire, а в другом нет?