В нашей конфигурации varnish у нас есть функция vcl_fetch, определенная следующим образом:
if (beresp.ttl > 0s) {
/* Remove Expires from backend, it's not long enough */
unset beresp.http.expires;
/* Set the clients TTL on this object */
set beresp.http.cache-control = "max-age=900";
/* Set how long Varnish will keep it */
set beresp.ttl = 1h;
/* marker for vcl_deliver to reset Age: */
set beresp.http.magicmarker = "1";
}
Затем в vcl_deliver:
if (resp.http.magicmarker) {
/* Remove the magic marker */
unset resp.http.magicmarker;
/* By definition we have a fresh object */
set resp.http.age = "0";
}
Проблема в том, что если я настраиваю сценарий (сценарий оболочки или сценарий php) для обращения к одному и тому же URL-адресу, я сначала вижу MISS, а затем HIT (пока все хорошо).
Я ожидаю, что сяду - это повторяющиеся ХИТЫ до тех пор, пока не пройдет отметка в 1 час, одно ПРОПУСКАНИЕ на отметке в 1 час, а затем снова час ХИТОВ. Другими словами, поскольку я повторно нажимаю один и тот же URL-адрес, он должен циклически переключаться между HIT и MISS каждые 1 ЧАС.
Вместо этого я вижу что-то вроде этого:
6/20/2013 6:30:05 - STRING HIT NOT FOUND
6/20/2013 10:32:11 - STRING HIT NOT FOUND
6/21/2013 12:33:06 - STRING HIT NOT FOUND
6/21/2013 2:34:06 - STRING HIT NOT FOUND
Сейчас 5:57 утра (почти 4 часа с тех пор, как HIT не обнаружен).
Все указанные выше промахи в кэше появляются около получасовой отметки, но с интервалом в 4 часа, 2 часа и 2 часа, а TTL установлен на 1 час.
Поэтому я не понимаю, почему объект хранится дольше 1 часа и почему его выселяют, казалось бы, через случайные промежутки времени. Как мне лучше понять, что происходит?
Кстати, я использую лак 3, если это помогает.
Итак, рассматриваемый лаковый сервер кэшировал сайт на Drupal 7. На сайте Drupal 7 у нас был настроен и включен модуль Drupal Varnish.
Насколько я могу судить, это периодически очищал кеш. Я смог определить это, используя следующую команду и увидев БАН, которые я не выдавал:
varnishadm -T localhost:6082 -S /etc/varnish/secret ban.list
Present bans: 1371834738.031740 193 req.http.host ~ www.ourdomain.com && req.url ~ /