Apache mod_disk_cache trabalhando para arquivos pequenos, mas não para arquivos grandes

3

Eu habilitei os módulos mod_cache e mod_disk_cache do Apache, para permitir o armazenamento em cache de imagens geradas dinamicamente de um script PHP (baseado em parâmetros de largura e altura).

Tudo funciona bem (o Apache armazena os arquivos em cache) sempre que eu forneço pequenos parâmetros de largura e altura para o meu script PHP. No entanto, quando eu forneço parâmetros maiores, e como o tamanho da imagem fica maior (acima de cerca de 50k), o Apache não está mais armazenando a resposta em cache. Nesse caso, o Apache cria um diretório no / var / cache / apache / mod_disk_cache, mas o diretório está vazio (ele não contém os arquivos .header e .data).

Eu tentei definir a diretiva CacheMaxFileSize, mas parece que não funcionou (tentei defini-la como um valor grande (2000000) no arquivo disk_cache.conf, mas ela não pareceu ter nenhum efeito e definir a diretiva no arquivo disk_cache.conf O arquivo de configuração do site desabilitou todo o armazenamento em cache - o armazenamento em cache de arquivos pequenos parou de funcionar).

Alguém encontrou algo semelhante e sabe como resolvê-lo?

O servidor está executando o Ubuntu 12.04 com o Apache 2.2.22

Aqui está minha configuração:

/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>

Script de geração de imagem 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;

?>
    
por quentinadam 14.02.2013 / 23:45

2 respostas

1

A maneira que um amigo meu encontrou é forçar o armazenamento em cache de todo o arquivo usando wget , simplesmente:

wget http://my.domain.com/mybigfile.ogg

ou

wget -O /dev/null http://my.domain.com/mybigfile.ogg

sem Intervalo !

Isso forçará apache a armazenar em cache o arquivo inteiro.

Depois disso, acessar intervalo em arquivos em cache agora é possível ...

(Desculpe pela resposta tardia: encontrei essa pergunta procurando por esse tipo de solução. Então, depois de procurar a solução alternativa em execução, eu postei isso;)

    
por 13.01.2014 / 12:26
0

você precisa dizer o tamanho máximo de arquivo que armazena, o padrão é 1MB, então cada arquivo maior do que não será armazenado em cache

defina o tamanho máximo para algo como 10MB na configuração do disk_cach

CacheMaxFileSize 10000000

aqui está um arquivo de configuração como um exemplo: 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>
    
por 26.09.2018 / 10:06