Управление кешем при использовании mod_cache и mod_pagespeed
Я использую mod_pagespeed с mod_cache.
Когда mod_pagespeed выключен и mod_cache выключен, я вижу следующий заголовок:
кэш-контроль: общественный, макс возраста =7200, нужно обязательно перепроверять
Когда mod_pagespeed включен и mod_cache выключен, я вижу следующий заголовок в ответе:
контроль кеша:max-age=0, no-cache, must-revalidate
Как и ожидалось, pagepeed переписал кеш-контроль.
Однако, когда mod_pagespeed включен, а mod_cache включен, я вижу следующее:
кэш-контроль: общественный, макс возраста =7200, нужно обязательно перепроверять
Согласно документам:
"По умолчанию PageSpeed обслуживает весь HTML с Cache-Control: no-cache, max-age=0, потому что преобразования, сделанные на странице, могут не кэшироваться в течение длительных периодов времени".
Почему html обслуживается как кешируемый, когда включены mod_pagespeed и mod_cache?
2 ответа
Кажется, что есть ошибка при запуске mod_pagespeed 1.11.33.2-0 с Apache Httpd 2.4.23 с запущенным mod_cache.
По какой-то причине mod_pagespeed не переписывает заголовки кэша, что делает HTML открытым для кеширования.
Временное решение, которое я использовал, состояло в том, чтобы виртуальный хост на порту 81 работал как сервер кэширования без скорости страниц.
<VirtualHost *:81>
ProxyPass / ajp://tomcat-ipaddress:8009/
ProxyPassReverse / https://final-hostname/
ModPagespeed off
RemoteIPHeader X-Forwarded-For
CacheEnable disk /
CacheHeader on
</VirtualHost>
На виртуальном хосте 443 или 80 вы можете проксировать хост на 81.
<VirtualHost _default_:443>
ProxyPass / http://localhost:81/
ProxyPreserveHost On
ModPagespeed on
ProxyPassReverse / https://final-hostname/
Потому что по умолчанию mod_cache работает в режиме быстрой обработки:
http://httpd.apache.org/docs/current/mod/mod_cache.html
это означает, что он касается ответа "последний" после того, как mod_pagespeed выполнил свои преобразования.
Использовать
CacheQuickHandler off
AddOutputFilterByType ...
Пример заказа фильтров по необходимости.