Назад | Перейти на главную страницу

mod_cache не работает

У меня есть сайт 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

С уважением, Яннинг