Я включил модули Apache mod_cache и mod_disk_cache, чтобы включить кеширование динамически сгенерированных изображений из сценария PHP (на основе параметров ширины и высоты).
Все работает нормально (Apache кэширует файлы) всякий раз, когда я добавляю в свой PHP-скрипт небольшие параметры ширины и высоты. Однако, когда я предоставляю большие параметры и размер изображения становится больше (около 50 КБ), Apache больше не кэширует ответ. В этом случае Apache создает каталог в / var / cache / apache / mod_disk_cache, но этот каталог пуст (он не содержит файлов .header и .data).
Я попытался установить директиву CacheMaxFileSize, но она, похоже, не сработала (я попытался установить для нее большое значение (2000000) в файле disk_cache.conf, но, похоже, это не имело никакого эффекта и установка директивы в файле конфигурации сайта отключил все кеширование - перестало работать кеширование мелких файлов).
Кто-нибудь сталкивался с чем-то подобным и знает, как это решить?
Сервер работает под управлением Ubuntu 12.04 с Apache 2.2.22
Вот мой конфиг:
/etc/apache2/mods-available/disk_cache.conf
<IfModule mod_disk_cache.c>
# cache cleaning is done by htcacheclean, which can be configured in
# /etc/default/apache2
#
# For further information, see the comments in that file,
# /usr/share/doc/apache2.2-common/README.Debian, and the htcacheclean(8)
# man page.
# This path must be the same as the one in /etc/default/apache2
CacheRoot /var/cache/apache2/mod_disk_cache
# This will also cache local documents. It usually makes more sense to
# put this into the configuration for just one virtual host.
CacheDirLevels 2
CacheDirLength 1
CacheIgnoreCacheControl On
CacheIgnoreURLSessionIdentifiers jsessionid
CacheIgnoreURLSessionIdentifiers PHPSESSID
CacheIgnoreHeaders Set-Cookie
CacheMaxFileSize 2000000
</IfModule>
/etc/apache2/sites-available/img.mydomain.com
<VirtualHost *:80>
ServerName img.mydomain.com
ServerAlias img.mydomain.eu
DocumentRoot /var/www/mydomain.com/img/
<Directory />
Options None
AllowOverride None
Order allow,deny
Deny from all
</Directory>
<Directory /var/www/mydomain.com/>
AllowOverride All
</Directory>
<Directory /var/www/mydomain.com/img/>
Options FollowSymlinks
Order allow,deny
Allow from all
</Directory>
<IfModule mod_disk_cache.c>
CacheEnable disk /cached/
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/img.mydomain.com-error.log
LogLevel debug
CustomLog ${APACHE_LOG_DIR}/img.mydomain.com-access.log combined
</VirtualHost>
Скрипт генерации изображений PHP /var/www/mydomain.com/img/cached/logo.php
<?php
//Generate Imagick image based on provided width and height
header("Content-Type: image/" . strtolower($image->getImageFormat()));
header("Content-Length: " . strlen($image));
header("Cache-Control: public, must-revalidate, max-age=2592000");
echo $image;
?>
Мой друг нашел способ принудительного кеширования всего файла с помощью wget
, просто:
wget http://my.domain.com/mybigfile.ogg
или
wget -O /dev/null http://my.domain.com/mybigfile.ogg
без Ассортимент!
Это заставит apache
для кеширования всего файла.
После этого доступ к ассортимент в кешированных файлах теперь возможно ...
(Извините за поздний ответ: я нашел этот вопрос, выполнив поиск такого решения. Поэтому, посмотрев текущий обходной путь, я публикую его;)
вам нужно указать максимальный размер файла, который он хранит, по умолчанию - 1 МБ, поэтому каждый файл больше, чем не будет кэшироваться
установите максимальный размер примерно 10 МБ в конфигурации для disk_cach
CacheMaxFileSize 10000000
вот файл конфигурации в качестве примера: LoadModule cache_module modules / mod_cache.so
<IfModule mod_cache.c>
LoadModule cache_disk_module modules/mod_cache_disk.so
<IfModule mod_cache_disk.c>
CacheRoot DIRECTORY_OF_THE_DISK_CACHE_HERE
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
CacheMaxFileSize 10000000
CacheDefaultExpire 86400
</IfModule>
</IfModule>