34 votes

Comment pré-compresser des fichiers avec mod_deflate dans Apache 2.x?

Je sers tout le contenu via apache avec Content-Encoding: zip mais cela se comprime à la volée. Une bonne partie de mon contenu est constituée de fichiers statiques sur le disque. Je veux compresser les fichiers au préalable plutôt que de les compresser à chaque fois qu'ils sont demandés.

C'est quelque chose que, je crois, mod_gzip fait dans Apache 1.x automatiquement, mais en ayant juste le fichier avec .gz à côté. Ce n'est plus le cas avec mod_deflate .

13voto

Aristotle Pagaltzis Points 43253

Cette fonctionnalité a été égaré dans mod_gzip de toute façon. Dans Apache 2.x, vous de le faire avec le contenu de la négociation. Plus précisément, vous devez activer MultiViews avec l' Options directive et vous devez spécifier vos types de codage avec l' AddEncoding directive.

8voto

Otto Points 5166

Pour répondre à ma propre question avec la ligne vraiment simple qui me manquait dans ma confiuration:

 Options FollowSymLinks MultiViews
 

Il me manquait l'option MultiViews. Il est là dans la configuration du serveur Web par défaut d'Ubuntu, alors ne soyez pas comme moi et déposez-le.

J'ai également écrit une tâche de râteau rapide pour compresser tous les fichiers.

 namespace :static do
    desc "Gzip compress the static content so Apache doesn't need to do it on-the-fly."
    task :compress do
    	puts "Gzipping js, html and css files."
    	Dir.glob("#{RAILS_ROOT}/public/**/*.{js,html,css}") do |file|
    		system "gzip -c -9 #{file} > #{file}.gz"
    	end
    end
end
 

5voto

Arno Schäfer Points 21

J'ai peur Multivues ne fonctionnera pas comme prévu: le doc a dit Multivues œuvres "si le serveur reçoit une requête pour /certains/dir/foo, si /peu/dir a Multivues activé, et /certains/dir/foo n'existe pas...", en d'autres termes: si vous avez un fichier foo.js et foo.js.gz dans le même répertoire, juste l'activation Multivues n'entraîne pas l' .gz fichier à envoyer, même si le AcceptEncoding gzip-tête est transmise par le navigateur (vous pouvez vérifier ce problème en désactivant temporairement mod_deflate et le suivi de la réponse avec, par exemple, HTTPFox).

Je ne suis pas sûr si il ya un moyen de contourner cela avec Multivues (peut-être que vous pouvez renommer le fichier d'origine et ensuite ajouter un AddEncoding la directive), mais je crois que vous pouvez construire un mod_rewrite règle pour gérer cela.

4voto

brianegge Points 12857

J'ai un Apache 2 construit à partir des sources et j'ai constaté que je devais modifier ce qui suit dans mon fichier httpd.conf :

Ajouter des vues multiples aux options:

 Options Indexes FollowSymLinks MultiViews
 

Décommentez AddEncoding:

 AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
 

Commentaire AddType:

 #AddType application/x-compress .Z
#AddType application/x-gzip .gz .tgz
 

1voto

Aeon Points 3746

mod_gzip contient également du contenu compressé à la volée. Vous pouvez pré-compresser les fichiers en vous connectant réellement à votre serveur et en le faisant à partir du shell.

 cd /var/www/.../data/
for file in *; do
    gzip -c $file > $file.gz;
done;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X