Я использую mod_pagespeed с mod_cache.
Когда mod_pagespeed выключен, а mod_cache выключен, я вижу следующий заголовок:
cache-control: public, max-age = 7200, must-revalidate
Когда mod_pagespeed включен, а mod_cache выключен, я вижу следующий заголовок в ответе:
cache-control: max-age = 0, no-cache, must-revalidate
Как и ожидалось, pagepeed перезаписал управление кешем.
Однако, когда включен mod_pagespeed и включен mod_cache, я вижу следующее:
cache-control: public, max-age = 7200, must-revalidate
Согласно документации:
"По умолчанию , PageSpeed обслуживает весь HTML-код с помощью Cache-Control: no-cache, max-age = 0, потому что преобразования, сделанные на странице, могут быть недоступны для кеширования в течение длительных периодов времени ».
Почему HTML-код обслуживается как кешируемый, когда включены mod_pagespeed и mod_cache?
Похоже на ошибку при запуске mod_pagespeed 1.11.33.2-0 с Apache Httpd 2.4.23 при запуске mod_cache.
По каким-то причинам mod_pagespeed не переписывает заголовки кэша, что оставляет html публично кэшируемым.
Обходным путем, который я использовал, был запуск virtualhost на порту 81 в качестве кэширующего сервера без страничной скорости.
<VirtualHost *:81>
ProxyPass / ajp://tomcat-ipaddress:8009/
ProxyPassReverse / https://final-hostname/
ModPagespeed off
RemoteIPHeader X-Forwarded-For
CacheEnable disk /
CacheHeader on
</VirtualHost>
На 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#cachequickhandler
, что означает касается ответа "последний" после того, как mod_pagespeed выполнил свои преобразования.
Используйте пример
CacheQuickHandler off
AddOutputFilterByType ...
, чтобы упорядочить фильтры соответствующим образом.