Я распространяю PHP-скрипт, и в последнее время у многих людей возникают проблемы с кэшем лака на учетных записях общего хостинга.
Это код в верхней части скрипта PHP. Однако я все еще получаю «Varnish: HIT» в заголовках ответов (и скрипт не работает правильно).
header('Pragma: no-cache');
header('Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate, proxy-revalidate');
header('Expires: Tue, 04 Sep 2012 05:32:29 GMT');
Один провайдер хостинга сказал, что невозможно отключить лак из скрипта PHP, даже установив заголовки кеша, как указано выше. Это кажется .. хорошо .. глупо? Но, похоже, соответствует моему опыту.
Так есть ли способ отключить / пропустить лак изнутри PHP? Или лак (по умолчанию) просто игнорирует эти заголовки кеша, установленные PHP?
Спасибо Jens-André Koch — я включу инструкции по лаку вместе со скриптом PHP, чтобы он игнорировал ответы без кэширования:
sub vcl_fetch {
if (beresp.http.cache-control ~ "(no-cache|private)" ||
beresp.http.pragma ~ "no-cache") {
set beresp.ttl = 0s;
}
}
Вы должны настроить Varnish, чтобы избежать кеширования страницы.
Измените ваш VCL, чтобы обнаружить заголовки …
укажите свой собственный заголовок, чтобы отключить кеширование для вашего файла или добавить его статически как не кешированный в конфигурации.
Вы не можете отключить Varnish из PHP, но есть хитрость, которую вы можете использовать, чтобы Varnish игнорировал текущую страницу. Varnish не будет кэшировать страницы, на которых вы устанавливаете cookie, поэтому, когда вы хотите, чтобы Varnish не кэшировал определенную страницу, вы можете написать этот фрагмент кода:
setcookie('xx', microtime(true), time()+600, '/');
Не самое оптимальное решение, но оно работает просто отлично …
Вы можете отключить кэш Varnish, создав файл .htaccess с помощью следующего:
Header set Cache-Control "max-age=0, private, no-cache, no-store, must-revalidate"
Как я понимаю ситуацию, вы можете сделать только очистку кеша:
https://www.varnish-software.com/static/book/Cache_invalidation.html