У меня есть сайт PHP, на котором много динамически генерируемых страниц. Я пытаюсь использовать mod_cache, чтобы повысить производительность, потому что в большинстве случаев контент не меняется в течение дня.
Я настроил mod_cache как мог, следуя примерам в Интернете, включая страница mod_cache на apache.org. Когда я установил LogLevel debug
, Я вижу небольшую информацию о кешировании, которое [не] происходит. Таких пар строк много:
[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(141): Adding CACHE_SAVE filter for /foo/bar
[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(148): Adding CACHE_REMOVE_URL filter for /foo/bar
Это нормально, потому что я установил CacheEnable disk /foo
, чтобы указать, что я хочу кэшировать все, что находится в / foo. Я новичок в mod_cache, но я понимаю, что эти строки просто означают, что mod_cache подтвердил, что URL-адрес должен быть кэширован, но предполагается, что должно быть больше строк, указывающих, что он сохраняет данные в кеш, и затем позже извлекают их при последующих обращениях к тому же URL.
Я могу нажимать один и тот же URL-адрес до посинения, будь то обновление F5 или нет, или с другими браузерами, или с разными компьютерами. Это всегда та пара строк, которая отображается в журналах, и ничего больше.
Когда я установил CacheEnable disk /
, то я вижу больше активности. Но я не хочу кэшировать весь сайт, а к сайту существует много-много разных подпутей, поэтому я не хочу изменять код для установки no-cache
заголовки во всех необходимых местах.
Я упомяну, что здесь используется mod_rewrite, переписывая / foo / bar на что-то вроде index.php?baz=/foo/bar
, но я понимаю, что mod_cache использует URL-адрес до перезаписи, а не URL-адрес после перезаписи.
Насколько я могу судить, у меня есть заголовки ответов, которые не мешают кешированию. Вот пример одного попадания:
Cache-Control:must-revalidate, max-age=3600
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:16790
Content-Type:text/html
Date:Fri, 01 Jun 2012 21:43:09 GMT
Expires:Fri, 1 Jun 2012 18:43:09 -0400
Keep-Alive:timeout=15, max=100
Pragma:
Server:Apache
Vary:Accept-Encoding
Конфигурация mod_cache выглядит следующим образом:
CacheRoot /var/cache/apache2/
CacheDirLevels 3
CacheDirLength 2
CacheEnable disk /foo
Что мешает mod_cache выполнять свою работу по кешированию?
Я столкнулся с той же проблемой, пытаясь сопоставить
CacheEnable Disk /api
Единственное сопоставление, которое работало, было
CacheEnable Disk /
Которая все кешировала.
Хотя в документации сказано, что mod_cache запускается после перезаписи URL, этого не произошло. Чтобы он заработал, я изменил его на
CacheEnable Disk /index.php/api
Это моя конфигурация, и она отлично работает:
<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot /var/cache/apache2/mod_disk_cache
CacheIgnoreCacheControl On
CacheMaxFileSize 2500000
CacheIgnoreURLSessionIdentifiers jsessionid
CacheIgnoreHeaders Set-Cookie
</IfModule>
Вам нужно иметь CacheIgnoreURLSessionIdentifiers, который соответствует вашим потребностям, поэтому, возможно, на PHP вам понадобится
CacheIgnoreURLSessionIdentifiers PHPSESSID
С уважением, Яннинг