Мне нужно получить mod_cache_disk для кеширования сайта, содержащего строки запроса. Проблема в том, что это продукт поставщика на IIS, который мы пытаемся кэшировать через mod_proxy, и он не содержит заголовков с истекшим сроком действия. Я понимаю, что эта проблема нарушает несколько RFC, и поэтому apache не делает этого по умолчанию.
Есть ли способ заставить apache 2.4.x кешировать строку запроса и заголовок без истечения срока действия?
Эта конфигурация будет кешироваться, но конечно без учета? он кэширует неправильный контент для большинства элементов.
CacheEnable disk https://
CacheEnable disk /
CacheRoot /var/cache/mod_proxy/
CacheDirLevels 4
CacheDirLength 5
CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheIgnoreHeaders None
CacheMaxFileSize 100000000
CacheMinFileSize 1
CacheMaxExpire 1209600
CacheDefaultExpire 3600
CacheIgnoreQueryString On
CacheStoreNoStore On
CacheStorePrivate On
Если я изменю CacheIgnoreQueryString на Off, он начнет выдавать ошибки, касающиеся заголовка expires.
AH00768: кэш: /view.image?Id=1114 не кэшируется. Причина: присутствует строка запроса, но нет явного срока действия,
В соответствии с этот ответ единственный способ сделать это - позволить Apache видеть нужные заголовки (Expires, о которых вы заявили, и, очевидно, также Last-Modified).
Плакат с этим ответом предлагал написать фильтр на стороне приложения, но, поскольку ваш продукт является продуктом поставщика, это может быть невозможно. Есть ли возможность добавить его прямо в IIS? В противном случае вам может повезти с настройкой двойного прокси: используйте один прокси для добавления заголовков (но не кеша) и прокси который из Apache (берём заголовки и кешируем).
Наиболее очевидным решением было бы удалить строку запроса до того, как она достигнет mod_cache
.
И наиболее очевидным модулем для этого будет mod_rewrite
.
Но это не будет работать, так как mod_cache
начал целенаправленно использовать неизмененная версия строки запроса в 2006 г..
это мое решение
<IfModule mod_cache.c>
CacheIgnoreNoLastMod On
CacheIgnoreHeaders Set-Cookie
<IfModule mod_disk_cache.c>
CacheRoot D:\\apache_cache
CacheEnable disk /
CacheDirLevels 1
CacheDirLength 1
</IfModule>
</IfModule>
и со стороны бэкэнда добавьте заголовок
Cache-Control:s-maxage=1200
s-maxage - для прокси-кешей и CDN