У меня довольно странная проблема. В моей среде мы запускаем кластер с балансировкой нагрузки из 8 серверов apache с серверной частью MySQL master-master. Перед apache у нас есть Varnish в слое кеша.
Мы запускаем Apache mod_pagespeed уже несколько недель, и по большей части он отлично работает. Проблема возникает, когда мы делаем свежие обновления кода из Git и / и все ресурсы JS / CSS меняются.
В основном проблема состоит из двух частей. Во-первых, после отправки кода мы обычно пользуемся возможностью смыть лак, перезапустить apache и перезапустить лак. При этом все объединенные / минифицированные файлы mod_pagespeed очищаются, гарантируя, что все новые ресурсы JS / CSS являются свежими. Проблема в том, что при этом имена файлов, которые mod_pagespeed создает, изменяются, но старые файлы (кажутся) все еще кэшируются для многих людей на стороне клиента, что приводит к очень неожиданным результатам. Однако, если мы не перезапустим apache, изменения в файлах могут появиться или не появиться на стороне клиента из-за кэшированных минифицированных ресурсов.
Простое решение - отключить mod_pagespeed, однако я бы не стал этого делать, так как это оказало довольно большое влияние на производительность.
Я чувствую, что должен быть лучший способ справиться с несоответствиями в кеше между клиентом и сервером, чтобы люди не слишком усердствовали или выполняли большое количество обновлений страниц, чтобы увидеть рабочую страницу.
Я могу предоставить фрагменты конфигурации, если они кому-нибудь понадобятся.
Если вы хотите проверить сайт, источник, заголовки или что-то еще, попробуйте следующие адреса:
Заранее спасибо!
Вы писали о промывке лаком. На самом деле есть два разных способа сделать это:
В вашем случае хорошей идеей может быть запрет всех файлов HTML, CSS и JS.
Для получения дополнительной информации перейдите по этой ссылке или спросите: https://www.varnish-cache.org/docs/3.0/tutorial/purging.html
Просто чтобы убедиться, что я понимаю проблему, похоже, что вы изменяете файлы, которые были обслужены до mod_pagespeed, из varnish с заголовками expires, которые сохраняют их в кэше после того, как они были изменены на бэкэнде.
У вас есть несколько вариантов, если это так. Вы можете настроить свой бэкэнд (лак) на отправку более коротких заголовков с истекающим сроком действия. Или вы можете настроить свои некэшированные ресурсы для связи с кешированными версиями с номерами исправлений, которые вы можете увеличивать при внесении изменений. Так они становятся:
http://site.com/asset.gif?p=930024982afb191
Также похоже, что есть другие ручки, которые вы можете настроить в mod_pagespeed, чтобы изменить время истечения срока действия определенных файлов:
http://code.google.com/speed/page-speed/docs/filter-cache-extend.html
Также, что касается клиентской стороны, вот дополнительная информация о том, как они действуют, что поможет настроить как varnish, так и mod_pagespeed:
http://code.google.com/speed/page-speed/docs/filter-cache-extend.html