Como habilitar o cache no Apache / Ubuntu Linux?

2

Eu tenho um arquivo XML grande (vários megabytes) que é atualizado com bastante frequência (a cada 10 minutos ou menos) e recebe muito tráfego. Eu gostaria de implementar algum cache para reduzir a largura de banda e a carga do servidor. Olhando para os documentos do Apache, vejo um conjunto estonteante de opções de configuração que envolvem várias combinações de mod_expires, mod_headers e mod_cache (e variantes). Eu acabo correndo em círculos e os resultados não são o que eu espero.

Estou confortável em editar os vários arquivos de configuração, se tiver alguma ideia do que devo alterar. Mas no momento estou cutucando no escuro e isso nunca é um sentimento confortável. Então, talvez se eu descrever o que quero, alguém aqui pode me pegar pela mão e dizer: "Isto é o que você precisa fazer".

Periodicamente, esse arquivo, chamado "stuff.xml", é atualizado e uma nova versão é copiada para o diretório. O URL externo seria, por exemplo, o link . Entenda, esta parte funciona. Sempre que eu solicito o arquivo, recebo o resultado esperado. Mas o arquivo é grande e eu quero economizar largura de banda, então primeiro eu gostaria de implementar a semântica GET condicional com o cabeçalho If-Modified-Since. Como eu faço isso? Eu habilitei mod_headers e mod_expired e adicionei a seção <FilesMatching> no meu httpd.conf como recomendado em inúmeros exemplos que eu vi online, mas isso não mudou o comportamento quando fiz uma requisição GET condicional. Eu sempre recebo um status 200 com o documento inteiro. Então, como diabos eu implemento isso?

Isso reduzirá as transferências desnecessárias. Eu também gostaria de limitar a quantidade de dados transferidos. Vendo como isso é XML, gzipping deve me salvar 50% ou mais. Meu próximo passo seria de alguma forma gzip o arquivo e, se não for muito difícil, armazená-lo na memória. Isso reduzirá a transferência de dados por acesso e também reduzirá as transferências de disco. Então, como eu implemento esse tipo de cache?

Obrigado antecipadamente.

    
por Jim Mischel 07.06.2010 / 23:34

2 respostas

2

Eu configurei o armazenamento em cache usando mod_expires , dentro do < VirtualHost > definição

ExpiresActive on
ExpiresByType text/xml "modified plus 5 minutes"   

Você pode configurar a compactação usando mod_deflate

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/xml 
    
por 07.06.2010 / 23:52
1

Por que o If-Modified-Since não funciona, acho que você deve postar as partes relevantes da sua configuração (Suponho que você tenha reiniciado o Apache). Você também pode querer analisar rapidamente os logs para ver se o mesmo IP (possivelmente o mesmo usuário) obtém esse arquivo XML várias vezes. Se sempre ou principalmente novos usuários, o cache do lado do cliente não ajudará a reduzir a carga no seu servidor.

Para a compressão, você quer olhar para mod_deflate e / ou mod_gzip . Aqui é uma comparação mais antiga do Linux Journal.

Para o cache de memória, acho que, se for acessado o suficiente para valer o cache, o sistema operacional provavelmente já estará armazenando o cache. Se você não tiver problemas de E / S ou latência ruim no arquivo, eu confiaria no sistema operacional para fazer seu trabalho.

    
por 07.06.2010 / 23:47