Fanatique :-)

Photo sous Licence Creative Commons By Sa 2.0 par Jeff Kubina

Vue sur le Planet Ubuntu User chez Gerry Ilagan. Dommage, je sors de chez le coiffeur... :-)

Tags : Ubuntu, Amusant, Geek, Linux

Optimiser son site (sous Ubuntu et ailleurs...) : Compresser avec gzip

Notes aux grincheux de service : la manipulation exposée dans ce billet fonctionne évidemment ailleurs que sous Ubuntu (en fait partout où Apache2 est installable), néanmoins elle a été testée et mise en place sous Ubuntu et fonctionne telle quelle avec l'installation d'Apache2 par défaut sur cette distribution.

Après avoir appliqué la règle 3 en ajoutant et configurant l'entête Expires, passons à la règle 4 du Livre High Performances Web Sites (ou des recommandations de performances Yahoo!) en compressant avec gzip les données transmises par le serveur web, ici Apache2. Comme son nom le suggère, cette règle vise à limiter au maximum le poids des contenus distribués en réduisant de près de 70% la taille des fichiers textes. Cela permet d'accélérer le premier chargement du site avant la mise en cache par le navigateur. Pour cela, on peut configurer Apache2 pour utiliser le mod_deflate qui va se charger de compresser ce qui peut l'être pour un sur coût CPU faible.

La première étape consiste à activer ce module ainsi que le module headers avec a2enmod et à recharger Apache pour prendre en compte ce nouveau module :

$ sudo a2enmod deflate
$ sudo a2enmod headers
$ sudo /etc/init.d/apache2 reload

Le module headers est nécessaire pour envoyer des entêtes spécifiques aux proxy caches de manière à ne pas envoyer de documents compressés à certains navigateurs buggés mais populaires...

La configuration par défaut, stockée dans le fichier /etc/apache2/mods-available/deflate.conf, fait en sorte de compresser les fichiers texte brut, HTML et XML ce qui est déjà bien, mais on peut aller plus loin en traitant tout ce qui est texte. Il est en effet inutile de compresser les images (JPG, PNG, GIF, ...), les PDF et bien d'autres types de fichier qui sont déjà compressés par nature. J'utilise la configuration suivante dans /etc/apache2/conf.d/deflate pour compresser en plus les feuilles de style et les scripts Javascript tout évitant certains bugs connus de quelques navigateurs.

 AddOutputFilterByType DEFLATE text/plain text/css application/x-javascript text/xml text/html
 
# gestion des navigateurs buggés
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
 
# gestion des proxy caches
Header  append Vary User-Agent

Pour faire prendre en compte cette configuration, il ne reste plus qu'à recharger Apache et le tour est joué.

Optimiser son site sous Ubuntu : Configurer l'en-tête Expires

Lire un livre sur comment optimiser son site web c'est bien, appliquer les conseils qui s'y trouvent c'est encore mieux. Parmi les 14 bonnes pratiques, 3 peuvent être appliquées très rapidement au niveau système en quelques lignes de commande et de configuration du serveur web pour un résultat quasi immédiat :

Dans un premier temps, je vais m'intéresser à la règle 3, je suppose que vous avez déjà un serveur web Apache2 actif servant des fichiers (peu importe la technologie autour). La configuration suivante est utilisée sur ma Dedibox sous Ubuntu avec Apache2 mais doit pouvoir s'appliquer à peu près partout.

Ajoutez et configurez l'en-tête Expires

L'en-tête Expires indique quand un élément devra expirer du cache du navigateur; mettre une date d'expiration dans un futur lointain permet de maximiser l'utilisation du cache navigateur et donc d'éviter les téléchargements inutiles, ce qui est particulièrement utile pour les éléments statiques (images, feuilles de style, ...) qui ont tendances à changer ... peu fréquemment mais à ralentir l'affichage de la page si ils ne sont pas en cache. Pour ces éléments, il est possible de configurer l'expiration dans Apache avec le module expires. Pour les pages dynamiques ou éléments générés dynamiquement, c'est au script d'envoyer l'en-tête et sa valeur adéquate par exemple avec la fonction header() en PHP.

L'activation du module pour Apache2, il faut utiliser a2enmod avec la ligne suivante et ensuite recharger apache :

$ sudo a2enmod expires
$ sudo /etc/init.d/apache2 reload

Il reste alors à configurer ce module. Je stocke la configuration de ce module dans le fichier /etc/apache2/conf.d/expires dont voici le détail :

ExpiresActive On
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/x-icon "access plus 30 days"
ExpiresByType text/css "access plus 30 days"
ExpiresByType application/x-javascript "access plus 30 days"

Tous les éléments statiques des types listés expirent 30 jours après leur premier téléchargement. Après un nouveau reload d'Apache, vous devriez voir apparaître l'en-tête Expires par exemple avec l'extension Firebug de Firefox au premier chargement des éléments de la page. Ensuite le navigateur utilisera son cache ce qui devrait accélérer l'affichage des pages suivantes utilisant les mêmes éléments.

Mise à jour noyau sur une dedibox

Plusieurs bugs de sécurté importants ont été découverts dans le noyau Linux, en particulier le bug CVE-2008-0600 permet à un utilisateur local d'obtenir un shell avec les droits root assez simplement. Même sans utilisateurs locaux, la faille peut devenir exploitable via une autre faille d'une application web par exemple, même si ça devient beaucoup plus compliqué.

La seule solution est de mettre à jour son noyau. J'ai réalisé cette opération tout à l'heure sauf que je ne connaissais pas encore le petit détail mentionné dans ce billet et rappelé dans un topic du forum Ubuntu-fr ce qui m'a donné un bon gros coup de stress :-) et une bonne heure de pwet.fr HS :-/

Bref, sur les dedibox utilisant le noyau fournit par Dedibox la manipulation est simple. Une fois le kernel spécifique installé, il faut indiquer l'emplacement de la racine du système avec l'ancienne syntaxe (type /dev/sdXY) au lieu des UUID. Sinon la machine ne reboote pas. Heureusement, les dedibox ont un système de rescue bien pratique qui permet de se sortir de ce genre de situation. Concrètement, avant pour chaque choix dans le fichier /boot/grub/menu.lst, j'avais quelque chose comme :

title       Ubuntu, kernel 2.6.24.2
root        (hd0,0)
kernel     /vmlinuz-2.6.24.2 root=UUID=238ddcbc-cb7e-4023-a48e-932d874b5ef0 ro quiet splash
quiet
savedefault

que j'ai remplacé par

title       Ubuntu, kernel 2.6.24.2
root        (hd0,0)
kernel      /vmlinuz-2.6.24.2 root=/dev/sda3 ro quiet splash
quiet
savedefault

Évidemment, /dev/sdaY est spécifique à l'organisation de la machine, il s'agit du numéro de la partition root du système. Il semble qu'avec le partitionnement par défault, il s'agisse de /dev/sda2. Avec le système de rescue de Dedibox, pour déterminer qu'elle est le bon numéro, il faut monter toutes les partitions du système et trouver le numéro de celle qui contient toute l'arborescence ( /bin, /usr, /lib, ...).

Poker Texas Hold'em multi plateforme et en ligne

J'ai découvert hier soir le logiciel Poker TH. Sous Ubuntu Gutsy, la version 0.5 est packagée et disponible dans le dépôt universe, elle permet de jouer au poker texas hold'em contre l'ordinateur ou en ligne avec des amis en se donnant rendez vous. En solo, l'IA est assez moyenne et c'est rapidement lassant. Néanmoins, la version 0.6 est sortie courant décembre, en plus d'améliorations plus ou moins mineures celle-ci permet de jouer en ligne facilement sur des serveurs directement gérés par le projet. Pour l'installer, c'est extrêment simple puisqu'il suffit de télécharger l'archive pour votre système d'exploitation, de l'extraire et de lancer le script shell pokerth.sh sous Linux ou le .exe sous Windows.

Pour le reste c'est plutôt bien réalisé et très amusant en ligne même si avec ma paire de 10 j'ai perdu le coup, that's poker ;-)

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.