На нашем сайте есть несколько больших файлов PDF и MP3, которые мы хотели бы кэшировать в Varnish как статические файлы. В настоящее время мы не делаем ничего особенного - просто удалите файлы cookie в vcl_recv
и set resetp.ttl = 100w;
в vcl_fetch
.
Проблема, похоже, заключается в том, что один из этих файлов запрашивается (возможно, старыми браузерами), а его еще нет в кеше Varnish. Пока Varnish загружает файл с серверной части, происходит задержка. Насколько я понимаю, он не начинает доставляться клиенту, пока данные не будут полностью загружены. Это может занять около 20 секунд, и иногда Adobe Acrobat или плагин MP3 путаются.
Есть способ как pass
контент прямо во время загрузки и сохранить его в кеше для следующего соответствующего клиентского запроса?
Потоковая ветка 3.0.2 + больше не актуальна и поддерживается только подписчиками Varnish Plus, без поддержки сообщества по этому поводу.
Поэтому, если вам нужны потоковые возможности, вы можете:
Рекомендации по прочтению: https://www.varnish-software.com/blog/http-streaming-varnish
С помощью vanilla Varnish 3.0 вы можете установить beresp.do_stream в значение true в vcl_fetch. Файл будет передаваться в потоковом режиме, пока он будет извлечен из серверной части. Предостережение: объект настроен на занятость во время потоковой передачи, поэтому другие клиенты будут приостановлены.
Также существует выпуск Varnish 3.0.2 с встроенной «полной» поддержкой потоковой передачи: http://repo.varnish-cache.org/test/3.0.2+streaming/ которые люди используют в производстве, так что, возможно, вы захотите попробовать.
Или, может быть, вы могли бы «подогреть» свои файлы, поместив их в кэш памяти Varnish, прежде чем пользователи начнут его загружать?
Varnish 5.1.2 делает именно то, что вы хотите, с конфигурацией по умолчанию.
Я пробовал это с событиями, отправленными сервером, где мне нужен потоковый первый запрос и кешированный второй запрос. Просто работает.