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

mod_mem_cache обслуживает неправильный контент!

Я только что включил mod_mem_cache на сервере Apache2 / PHP5, на котором запущено собственное приложение, и ужаснулся результату. Внезапно появились неправильные изображения, и я заметил, что однажды запрос HTML-страницы обслуживал вместо этого CSS-страницу! Что может быть причиной этого? Конфиг выглядит следующим образом:

CacheEnable mem /
MCacheSize 204800
CacheDefaultExpire 3600
CacheIgnoreHeaders Set-Cookie
MCacheMinObjectSize 100
MCacheMaxObjectSize 5242880
MCacheRemovalAlgorithm LRU

Внутри mod_cache и mod _ * _ cache ключи поиска представляют собой довольно длинные контрольные суммы канонического URI и любых параметров Vary: (для согласованного содержимого). Маловероятно, что эти ключи поиска будут конфликтовать, поэтому, если вы получаете неправильные ответы для указанной выше конфигурации, это похоже на ошибку.

Я один из авторов модулей кеширования, и если бы вы могли либо отправить мне подробности запроса по электронной почте (colm@apache.org) и dev@httpd.apache.org, либо сообщить об ошибке с некоторыми деталями, которые мы можем использовать воспроизводить - http://httpd.apache.org/bug_report.html - мы можем это сделать.

Или не стесняйтесь размещать их здесь, и мы решим проблему.

Я нашел проблему. Я использовал mod_rewrite для переписывания URL-адресов несуществующих файлов в PHP-скрипт, который отправлял бы эти URL-адреса в соответствующий модуль. Поскольку все эти виртуальные URL-адреса были переписаны на один и тот же URL-адрес, mod_cache запутался. Чтобы решить эту проблему, я изменил следующую часть своей конфигурации Apache:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /dispatch.php

Кому:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /dispatch.php/$1

И теперь кеширование работает отлично!