57 votes

Comment faire pour que la compression gzip d'Apache fonctionne ?

Je n'arrive pas à faire en sorte que mon site utilise la compression gzip.

J'ai récemment regardé ceci vidéo par Chris Coyier sur css-tricks.com. Dans la vidéo, il explique comment activer la compression gzip pour accélérer le fonctionnement des sites Web.

Conformément à ses instructions, je me suis connecté à github via html5boilerplate.com, j'ai copié le code de compression gzip de leur fichier .htaccess, je l'ai collé dans mon propre fichier et je l'ai téléchargé sur mon site.

Je l'ai testé via gzipwtf.com et cela ne semble pas fonctionner. Quelqu'un peut-il m'aider ?

Mon fichier .htaccess ressemble à ceci :

# ----------------------------------------------------------------------
# Trim www
# ----------------------------------------------------------------------

RewriteEngine On
RewriteCond %{HTTP_HOST} !^orbitprint.com$ [NC]
RewriteRule ^(.*)$ http://orbitprint.com/$1 [L,R=301]

# ----------------------------------------------------------------------
# Gzip compression
# ----------------------------------------------------------------------

<IfModule mod_deflate.c>

  # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
  <IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
      SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
      RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
    </IfModule>
  </IfModule>

  # Compress all output labeled with one of the following MIME-types
  <IfModule mod_filter.c>
    AddOutputFilterByType DEFLATE application/atom+xml \
                                  application/javascript \
                                  application/json \
                                  application/rss+xml \
                                  application/vnd.ms-fontobject \
                                  application/x-font-ttf \
                                  application/xhtml+xml \
                                  application/xml \
                                  font/opentype \
                                  image/svg+xml \
                                  image/x-icon \
                                  text/css \
                                  text/html \
                                  text/plain \
                                  text/x-component \
                                  text/xml
  </IfModule>

</IfModule>

1 votes

Pouvez-vous ajouter quelques détails sur votre serveur, par exemple les en-têtes de réponse ? .htaccess ne fonctionne que pour les serveurs Apache, et si votre serveur Apache n'a pas le mod_filter.c activé, la compression ne fonctionnera pas.

0 votes

Date : Tue, 11 Sep 2012 10:46:19 GMT Server : Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 X-Powered-By : PHP/5.2.9 Expires : Thu, 19 Nov 1981 08:52:00 GMT Cache-Control : no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma : no-cache Connection : close Transfer-Encoding : chunked Content-Type : text/html

93voto

Oussama Points 5334

Essayez ceci :

####################
# GZIP COMPRESSION #
####################
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/x-httpd-php
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip

8 votes

A quoi sert l'en-tête Vary ici ? Est-il nécessaire ?

0 votes

@MuratAyfer Cela a quelque chose à voir avec la gestion des serveurs proxy. Je ne connais pas les détails.

7 votes

@Oussama Est-il possible d'obtenir une explication de ce que fait chaque ligne ?

38voto

Umut D. Points 209

Il est préférable de l'implémenter comme dans le snippet ci-dessous.

Il suffit de coller le contenu ci-dessous dans votre .htaccess puis, vérifiez les performances en utilisant : Google PageSpeed , Outils Pingdom y GTmetrics .

# Enable GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</ifmodule>

# Expires Headers - 2678400s = 31 days
<ifmodule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType image/gif "access plus 2678400 seconds"
  ExpiresByType image/jpeg "access plus 2678400 seconds"
  ExpiresByType image/png "access plus 2678400 seconds"
  ExpiresByType text/css "access plus 518400 seconds"
  ExpiresByType text/javascript "access plus 2678400 seconds"
  ExpiresByType application/x-javascript "access plus 2678400 seconds"
</ifmodule>

# Cache Headers
<ifmodule mod_headers.c>
  # Cache specified files for 31 days
  <filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$">
  Header set Cache-Control "max-age=2678400, public"
  </filesmatch>
  # Cache HTML files for a couple hours
  <filesmatch "\.(html|htm)$">
  Header set Cache-Control "max-age=7200, private, must-revalidate"
  </filesmatch>
  # Cache PDFs for a day
  <filesmatch "\.(pdf)$">
  Header set Cache-Control "max-age=86400, public"
  </filesmatch>
  # Cache Javascripts for 31 days
  <filesmatch "\.(js)$">
  Header set Cache-Control "max-age=2678400, private"
  </filesmatch>
</ifmodule>

0 votes

Puis-je simplement ajouter ceci dans la racine et cela fonctionne pour tous les sous-dossiers ?

0 votes

Pourquoi avez-vous besoin des deux ExpiresByType y Header set Cache-Control ?

0 votes

Je fournis code .htaccess complet pour passer Enable compression y Leverage browser caching en Google PageSpeed Insight :

11voto

Paolo Stefan Points 3352

Votre fichier .htaccess devrait fonctionner sans problème ; il dépend de quatre modules Apache différents (un par module). <IfModule> ). Je suppose que c'est l'un des cas suivants :

  • votre serveur Apache n'a pas les modules mod_filter, mod_deflate, mod_headers et/ou mod_setenvif installés et en fonctionnement. Si vous pouvez accéder à la configuration du serveur, vérifiez les éléments suivants /etc/apache2/httpd.conf (et les fichiers de configuration Apache associés) ; sinon, vous pouvez voir quels modules sont chargés via la commande phpinfo() sous la section apache2handler (voir image jointe) ; ( EDITAR ) OU, vous pouvez ouvrir une fenêtre de terminal et lancer la commande sudo apachectl -M qui listera les modules chargés ;

  • si vous obtenez une erreur de serveur interne http 500, votre serveur n'est peut-être pas autorisé à utiliser les fichiers .htaccess ;

  • vous essayez de charger un fichier PHP qui envoie ses propres en-têtes (écrasant les en-têtes d'Apache), ce qui "embrouille" le navigateur.

Dans tous les cas, vous devez vérifier la configuration de votre serveur. y journaux d'erreurs pour voir ce qui ne va pas. Juste pour être sûr, essayez d'utiliser le moyen le plus rapide proposé aquí dans la documentation d'Apache :

AddOutputFilterByType DEFLATE text/html text/plain text/xml

et essayez ensuite de charger un gros fichier texte (de préférence, nettoyez votre cache avant).

( EDITAR ) Si les modules nécessaires sont présents (dans le répertoire des modules Apache) mais ne sont pas chargés, il suffit d'éditer /etc/apache2/httpd.conf et d'ajouter un fichier Charger le module pour chacun d'entre eux.

Si les modules nécessaires ne sont pas là (ni chargés, ni dans le répertoire des modules Apache), je crains que la seule option soit de réinstaller Apache (une version complète).

phpinfo() apache2handler section

0 votes

Ma page phpinfo() n'a pas de section apache2handler, il n'y a aucune mention de l'un de ces modules dans mon fichier httpd.conf, et mon dossier de modules apache semble être assez peu fourni. lien . Est-ce typique ?

0 votes

Non, ce n'est pas du tout typique. Je me serais attendu à ce qu'il y ait d'autres modules... Est-ce un Apache personnalisé ?

0 votes

Je ne suis pas sûr, car c'est ainsi que Pixelinternet a configuré mon serveur lorsque je l'ai acheté. Je vais contacter mon hébergeur et voir s'il peut m'aider à installer les modules dont j'ai besoin. Merci pour votre aide !

9voto

nrvarun Points 193

Tout d'abord aller dans apache/bin/conf/httpd.conf et assurez-vous que mod_deflate.so est activé.

Ensuite, allez à la .htaccess et ajoutez cette ligne :

Filtre de sortie DEFLATE

Cela devrait produire tout le contenu servi sous forme gzippée, je l'ai essayé et cela fonctionne.

2voto

Manish Points 308

Dans mon cas, j'ai utilisé le code suivant pour activer la compression gzip dans le serveur web Apache.

  # Compress HTML File, CSS File, JavaScript File, Text File, XML File and Fonts
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/json
    AddOutputFilterByType DEFLATE application/x-httpd-php
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE font/otf
    AddOutputFilterByType DEFLATE font/ttf

J'ai pris comme référence http://www.tutsway.com/enable-gzip-compression-using-htacess.php .

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