Compression GZip chez 1and1

Ayant choppé une infection je suis cloué @ home.

Du coup je vais vous raconter comment rendre dingue votre serveur Web. Pour vous Apache c'est du chinois ? Pour moi c'est du grec ancien. Allez tripoter votre serveur Web pour accroître ses performances vous excite ? Je m'en vais vous narrer alors comment faire...

• • •

Compresser ses fichiers de sortie quand le site Web est en mutualisé chez l'hébergeur 1and1

Si, comme moi, vous êtes hébergé chez 1and1 vous savez que la méthode habituelle, via un .hatccess n'a pas plus d'effet sur la réduction de la taille de vos fichiers de sortie que la baisse de la TVA sur le menu des restaurateurs.

IfModule mod_gzip.c mod_gzip_on Yes
mod_gzip_dechunk Yes mod_gzip_item_include file .(html?|txt|css|js|php|pl|jpg|png|gif)$
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

Comment compresser ses fichiers de sortie quand le site Web est en mutualisé chez l'hébergeur 1and1- mickey mouse en apprenti sorcier gzip est banni chez 1and1 : les modules Apache mod_deflate et mod_gzip ne sont pas installés.
Du coup, vous pouvez faire faire toutes les acrobaties à votre .htaccess, donner toutes les instructions PHP dans vos templates, nada, peanuts, zobi... , le serveur n'obéira pas.
C'est là que l'apprenti sorcier intervient.
Musique maestro !

De quoi allez-vous avoir besoin pour faire cette manipulation ?
De courage ou, à défaut, d'une bonne dose d'inconscience.
Prêt ? C'est parti :

  1. Jouons au Da Vinci Code
    Vous avez l'âme d'un Dan Brown ? Parfait : on va percer les secrets de votre serveur.
    Il s'agit de le repérer parmi les centaines de millions qui existent sur la planète.
    Ouvrez votre outil de codage habituel et créez un document PHP avec ces lignes de code :
    ? phpinfo(); ?
    Enregistrez-le sous le nom « phpinfo.php », téléchargez-le à la racine de votre site, pointez votre navigateur sur ce fichier (http:votredomaine.com/phpinfo.php et prenez votre loupe.
    Il s'agit de repérer dans cette page une ligne qui ressemblerait à ça :
    /kunden/homepages/69/d206389610/htdocs c'est dans la rubrique DOCUMENT_ROOT.
    C'est bon ? Vous l'avez ? Vous avez trouvé le chemin exact de votre serveur.
    Poursuivons.
  2. Ne vous prenez pas l'en-tête
    Toujours muni de votre outil de codage, créez un nouveau fichier PHP dans lequel vous collerez ces lignes
    
    $pathinfo=pathinfo($_ENV['SCRIPT_FILENAME']);
    $extension=$pathinfo['extension'];
    $offset = 60 * 60 * 24 * 30;
    if($extension=='css'){
    header('Content-type: text/css; charset=utf-8');
    header("Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT");
    }
    if($extension=='js'){
    header('Content-type: text/javascript; charset=utf-8');
    header("Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT");
    
    Grâce à cette en-tête HTTP on va dire aux navigateurs qu'ils vont recevoir des fichiers compressés et qu'ils doivent se démerder avec (les décompresser et afficher le contenu).
    Avec la valeur expires on va indiquer aux caches réseau qu'ils doivent impérativement recharger la page originale à la date indiquée (celle du serveur située dans la passé).
    Pour vous c'est du latin ? Cet extrait de la bible d'OpQuast va vous donner un cours accéléré :

    Configurer le serveur Web pour qu'il puisse gérer la mise en cache des éléments statiques et gérer - au niveau applicatif - la possible mise en cache des éléments dynamiques.

    En pratique, et en accord avec les spécifications HTTP le serveur devra envoyer les champs ETag , Date et Last-Modified correspondant respectivement à l'identifiant de la ressource, à la date de traitement de la requête et à la date de dernière modification de la ressource demandée. L'ensemble des dates étant au format GMT. Ces informations pouvant être complétées par les champs Content-Length et Expires si la taille en octets et la date d'expiration exacte du contenu sont connues.

    Enregistrez-le sous le nom de headers.php. Placez ensuite ce fichier dans un dossier que vous nommerez comme vous voulez.
    Pour l'exemple toutefois ce dossier se nommera webscripts. C'est bon ?
    Étape suivante :
  3. Emprisonnons l'Apache
    Maintenant c'est un fichier de commandes au serveur que vous allez créer.
    Placez ces lignes dans un document que vous nommerez php.ini (avec l'adresse du serveur que vous avez récupéré à l'étape et le nom du répertoire que vous avez créé à l'étape 2).
    output_handler = ob_gzhandler
    auto_prepend_file=/kunden/homepages/69/d206389610/htdocs/webscripts/headers.php

    La première ligne indique au serveur que vous voulez utiliser l'outil de compression de PHP pour traiter les fichiers JS et CSS tels qu'indiqué dans le fichier headers.
    Ce fichier est à placer à la racine du site ainsi que dans les répertoires de votre CSS et de vos JS.
  4. Domestiquons l'Apache
    Ouvrez maintenant votre fichier .htaccess et ajoutez cette ligne :
    AddType x-mapp-php5. Php. Shtml. Html. Htm. Js. Css. Txt
    Vous n'êtes pas obligé d'utiliser PHP5 mais cela vous sera sans doute utile pour d'autres bidouilles plus tard.
    Si vous voulez rester en PHP4 il suffit de l'indiquer ainsi : x-mapp-php4. Mais bien sûr vous l'aviez deviné car vous êtes un as.

C'est bon ? C'est fini ? Ça marche ?
Comment ça vous n'en savez rien ?
Vous pouvez le vérifier avec ces services en ligne :

  1. Pour voir les en-têtes HTTP que renvoie votre serveur, rendez-vous sur Web-Sniffer.
    Le service vous dira des mots doux tels que ceux-là :
    HTTP Status Code: HTTP/1.1 200 OK
    Date:	Tue, 24 Nov 2009 10:57:43 GMT	
    Server:	Apache	
    Cache-Control:	no-store, no-cache, must-revalidate, post-check=0, pre-check=0	
    Content-Encoding:	gzip	
    Expires:	Thu, 19 Nov 1981 08:52:00 GMT	
    Pragma:	no-cache	
    Vary:	Accept-Encoding	
    X-Powered-By:	PHP/5.2.11	
    X-Robots-Tag:	index,noarchive	
    Connection:	close	
    Transfer-Encoding:	chunked	
    Content-Type:	text/html
    
  2. Pour vérifier que vos fichiers sont bien compressés allez sur GIDNetwork.
    Faites un test sur l'un de vos pages ; vous devriez obtenir un résultat tel que celui-ci :
    Web page compressed?  	Yes
    Compression type? 	gzip
    Size, Markup (bytes) 	24,151
    Size, Compressed (bytes) 	7,784
    Compression % 	67.8
    

Épatant non ?
Pour ne rien vous cacher je n'en sais rien encore. Les en-têtes HTTP sont corrects. La compression s'effectue bien sur les fichiers.
Mais j'ai fait une bidouille en plus (que nous verrons dans l'article qui suivra) et, ces 2 derniers jours, mon service de surveillance WoozWeb m'a indiqué que mon serveur avait pédalé dans le « yogurt » à plusieurs reprises. Ce qui ne va pas plaire à 1and1.
Je verrais dans les prochains jours si ma bidouille en plus est une bidouille en trop.
Cet article a été intégralement pompé sur celui d'un mec qui s'y connaît, mrrena.

Lien




Commentaires :

Patrice||#1
Patrice
Merci merci beaucoup. C'est exactement ce que je cherchais.
franckie||#2
franckie
Tout simplement génial. Merci. Le gain en rapidité se voit à l'oeil nu. lol
Christian Vannote||#3
Christian Vannote
Ca marche impecable ! J'en ai cherché des solutions et c'est la seule qui fonctionne. Merci beaucoup.
Seren||#4
Seren
Simple, efficace... ça marche du 1er coup. Merci beaucoup.
babouches||#5
babouches
Salut

Merci sa marche super bien pour mon site de Babouches
pokwador||#6
pokwador
bonjour,
ou met on le ficher php.ini?
merci
Philippe||#7
Philippe
Bonjour aussi,
à la racine du site
Musique gratuite||#8
Musique gratuite
Il faut également mettre le php.ini dans le ou les répertoires des ressources à "gzipper".
Par exemple, le répertoire des js ou le répertoire des css
Une vraie spécificité 1&1...
Philippe||#9
Philippe
C’est tout à fait exact.
1 000 excuses pour l’oubli.
ced||#10
ced
Merci beaucoup cela fonctionne parfaitement et du 1er coup en plus !
NaM||#11
NaM
Merci infiniment !

Je suis passée d'une page d'accueil de plus de 24ko à 8ko !!!

Arigatou gozaimasu :)
Juju34070||#12
Juju34070
Bonjour, j'ai effectué une première fois la manip, j'ai fais une erreur très bête... j'ai oublié de remplacer à l'étape 3 la ligne htdocs ect... du coup j'ai laissé celle en exemple... erreur d'intention.. une page s'affichait sur mon site avec plein de caractères "bizarre"... je me suis rendu compte de mon erreur donc j'ai retrouvé le bon htdocs/ ect... et recommencé le tuto en n'oubliant pas cette fois de remplacer cette ligne par la mienne... Gros problème, Gzip est activé ( test avec GidNetwork) mais je n'ai plus accès a mon site (wordpress), j'ai des caraactères bizarre... Merci de me donner un coup de main... j'ai commencé le référencement sur les annuaires ect et maintenant mon site est down... Le site est pecheursdu34.com.
Philippe||#13
Philippe
Bonjour,
il suffit de faire un rétropédalage en y déposant par FTP le fichier .htaccess originel et en supprimant (ou en renommant) le php.ini.
Juju34070||#14
Juju34070
Merci Philippe pour votre réponse... j'ai essayé cela hier soir et je me retrouve avec une erreur 500... je ne sais plus quoi faire.
Juju34070||#15
Juju34070
Merci philippe, vous êtes mon sauveur de la journée ! vraiment un grand merci !! par contre, j'ai bien récupérer ma page d'accueil, mes pages wordpress, mais par contre, tous les catégories d'articles sont sans le thème , c'est un brut, mais uniquement les articles..
voir pecheursdu34.com
Une solution ?
Philippe||#16
Philippe
Non je ne peux pas trop aider Juju... c’est sans doute à voir dans l’administration de WP. Mais je ne l’utilise pas (et j’en ai même une sainte horreur tant le code est lourd) : il faudrait poser la question sur un forum de spécialistes de ce CMS. La consultation de la documentation, voire l’achat d’un livre, peut être utile aussi.
Site Web Pluri||#17
Site Web Pluri
Bonjour Philippe,

pourquoi ne pas créer un fichier php.ini contenant "zlib.output_compression = true" comme expliqué dans la FAQ ?
Philippe @ HTML5 & autres geekeries||#18
Philippe @ HTML5 & autres geekeries
Et ça marche ? Je crois avoir aussi testé cette méthode mais peut-être m’y étais-je mal pris, car la compression n’était pas au rendez-vous. Celle-ci fonctionne mais s’il y en a de plus simples il faut faire passer les liens...
Site Web Pluri||#19
Site Web Pluri
Ça marche, mais il faut effectivement multiplier les php.ini Ce n'est ce pas le cas dans votre solution ?
Philippe||#20
Philippe
Oups : désolé... j’ai corrigé mon commentaire parce qu’effectivement, je disais une bêtise (enfin, pas tout à fait mais j’en étais pas loin) et il a dû partir dans le fil RSS que vous suivez peut-être...

Ça rend la conversation un peu plus compliquée du coup... mais c’est pas grave...
Philippe||#22
Philippe
Ah ! Excellent ! C'est vrai que pour ce qui concerne les informations techniques chez cet hébergeur il faut se lever de bonne heure pour les trouver sur le site francophone. :-(

Il y a donc 2 solutions maintenant pour régler le problème de la compression gzip chez 1and1.
NaM||#23
NaM
Je me demandais pourquoi la compression marchait parfaitement sur mes fichiers php mais pas sur les css et js...
En fait il a fallu que j'aille voir l'article original pour comprendre :

j'ai remplacé la ligne :

= auto_prepend_file / kunden/homepages/69/d206389610/htdocs/webscripts/headers.php

par :

auto_prepend_file = /kunden/homepages/69/d206389610/htdocs/webscripts/headers.php

J'ai également remplacé la superglobale $_ENV qui ne renvoyait rien par $_SERVER

Maintenant tout marche impec.

J'espère que ça pourra aider des gens :)
NaM||#24
NaM
Autant pour moi, la superglobale $_ENV marche bel et bien :)
Philippe||#25
Philippe
Ah merdalors ! J’avais fait une co(q)uille en corrigeant un truc.
Réparé maintenant. Merci Nam.
NaM||#26
NaM
De rien :)

Par contre, lightbox n'aime pas du tout être "gzippé"... T_T

Les autres .js pas de soucis mais je crois bien que je vais devoir me passer de lighbox...
NaM||#27
NaM
En fait c'est le css de lightbox qui n'aime pas être "gzippé". En enlevant les css du .htaccess ça remarche...

Si t'as une solution je suis preneuse, sinon je vais quand même chercher autre chose que lighbox pour pouvoir recompresser mes css.

(Désolée, je suis entrain de pourrir tes commentaires !)
NaM||#29
NaM
Meuh mon commentaire n'a pas été publié :'(

Je disais juste que j'attends que CSS3 devienne valide W3C avant de me pencher dessus.
Surtout que certains navigateurs ont déjà du mal avec CSS2.1.....
Mais merci pour le lien.

Et je confirmais que le CSS de la lightbox, si gzippé, faisait complètement planter l'affichage avec lightbox.

J'ai du coup mis en place fancybox et là ça marche impec même gzippé (et en plus je préfère)

Voilou !
Ah et merci de continuer à répondre aux commentaires malgré ta décision d'abandon du site :)
Benj||#30
Benj
Alors, tout d'abord, merci pour toute l'info... super jeu de piste que cette compression gzip chez 1&1 !

En suivant la procédure décrite ci-dessus :
- des services comme http://web-sniffer.net/ et http://www.gidnetwork.com/tools/gzip-test.php me confirment que la compression fonctionne (cool!)
- par contre, un Google Page Speed (https://developers.google.com/pagespeed) ou un coup sur http://www.webpagetest.org me disent le contraire... qui croire ? Et j'avoue que si je pouvais avoir la bénédiction de Google, ce serait super bonus...

Des idées quelqu'un ?

Les commentaires pour ce billet sont fermés