web-dev-qa-db-fra.com

Comment faire fonctionner la compression Apache gzip?

Je ne parviens pas à utiliser mon site pour utiliser la compression gzip.

J'ai récemment regardé ce vidéo de Chris Coyier sur css-tricks.com. Dans la vidéo, il explique comment activer la compression gzip pour que les sites Web fonctionnent plus rapidement.

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

Je l'ai testé via gzipwtf.com et cela ne semble pas fonctionner. Est-ce que quelqu'un peut m'aider avec ça?

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>
54
dai.hop

Essaye ça :

####################
# 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
91
Oussama

Il est préférable de le mettre en œuvre comme dans l'extrait ci-dessous.

Il suffit de coller le contenu ci-dessous dans votre .htaccess fichier, puis, vérifiez les performances avec: Google PageSpeed , Pingdom Tools et 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>
36
Umut D.

Votre .htaccess devrait fonctionner correctement; cela dépend de quatre modules Apache différents (un par directive <IfModule>). Je suppose que l'un des suivants:

  • votre serveur Apache n'a pas de modules mod_filter, mod_deflate, mod_headers et/ou mod_setenvif installés et en cours d'exécution. Si vous pouvez accéder à la configuration du serveur, veuillez vérifier /etc/Apache2/httpd.conf (Et les fichiers de configuration Apache associés); sinon, vous pouvez voir quels modules sont chargés via phpinfo(), sous la section Apache2handler (voir l'image jointe); (( [~ # ~] modifier [~ # ~] ) OU, vous pouvez ouvrir une fenêtre de terminal et lancer la commande Sudo apachectl -M listera les modules chargés;

  • si vous obtenez une erreur de serveur interne http 500, votre serveur ne sera 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 "confond" le navigateur.

Dans tous les cas, vous devriez revérifier les journaux des erreurs de configuration et de votre serveur pour voir ce qui ne va pas. Juste pour être sûr, essayez d'utiliser le moyen le plus rapide suggéré ici dans la documentation Apache:

AddOutputFilterByType DEFLATE text/html text/plain text/xml

puis essayez de charger un fichier texte volumineux (de préférence, nettoyez d’abord votre cache).

( [~ # ~] éditer [~ # ~] ) 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 une directive LoadModule pour chacun d’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

10
Paolo Stefan

Tout d'abord allez à Apache/bin/conf/httpd.conf et assurez-vous que mod_deflate.so est activé.

Ensuite, allez dans le fichier . Htaccess et ajoutez cette ligne:

SetOutputFilter DEFLATE

Cela devrait afficher tout le contenu servi en gzip, je l’ai essayé et ça marche.

7
nrvarun

Si votre hôte Web utilise le panneau C, activez G Compression Zip sur Apache C Panel

Allez sur CPanel et vérifiez l’onglet logiciel.

Auparavant, le site Web Optimiser fonctionnait, mais une nouvelle option est désormais disponible: "MultiPHP INI Editeur").

Sélectionnez le nom de domaine que vous souhaitez compresser.

Faites défiler l'écran jusqu'en bas jusqu'à trouver la compression de sortie Zip et l'activer.

Maintenant, vérifiez à nouveau pour la compression G Zip.

Vous pouvez également suivre le didacticiel vidéo. https://www.youtube.com/watch?v=o0UDmcpGlZI

2
Shree Sthapit

Dans mon cas, j'ai utilisé le code suivant pour activer la compression gzip sur 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 référence à partir de http://www.tutsway.com/enable-gzip-compression-using-htacess.php .

2
Manish

Couru dans ce problème en utilisant la même configuration .htaccess. J'ai réalisé que mon serveur servait les fichiers javascript comme text/javascript au lieu de application/javascript. Une fois que j'ai ajouté text/javascript à la déclaration AddOutputFilterByType, gzip a commencé à fonctionner.

Pourquoi javascript était-il servi comme text/javascript: il y avait un AddType 'text/javascript' js déclaration en haut de mon fichier racine .htaccess. Après l'avoir retiré (il avait été ajouté par erreur), javascript commence à servir en tant que application/javascript.

2
Ryan Fitzer
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

<IfModule mod_deflate.c>
# Insert filters
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
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 application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE image/svg+xml

# Drop problematic browsers
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>
1
DevWL

Dans mon cas, ajoutez seulement cette ligne travaillée

SetOutputFilter DEFLATE

1
Raugaral

Activer la compression via .htaccess

Pour la plupart des lecteurs, la compression est activée en ajoutant du code à un fichier nommé .htaccess sur leur hôte/serveur Web. Cela signifie que vous devez aller sur le gestionnaire de fichiers (ou partout où vous allez pour ajouter ou télécharger des fichiers) sur votre hébergeur.

Le fichier .htaccess contrôle beaucoup de choses importantes pour votre site.

Le code ci-dessous devrait être ajouté à votre fichier .htaccess ...

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Enregistrez le fichier .htaccess, puis actualisez votre page Web.

Vérifiez si votre compression fonctionne à l'aide de outil de compression Gzip .

1
Amuk Saxena