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

Apache mod_disk_cache работает для небольших файлов, но не для больших файлов

Я включил модули 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>