Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / Apache 2 / Installer le module Google PageSpeed pour Apache 2 sur Debian

Installer le module Google PageSpeed pour Apache 2 sur Debian

Par Pierre-Yves Landuré Dernière modification 02/03/2018 20:35

Le module Apache 2 Google PageSpeed est un outil optimisant automatiquement les sites Internet hébergés par le serveur.

Ce guide est testé sur:

  • Debian 6.0 Squeeze

Prérequis

Ce guide nécessite un serveur Apache 2 installé tel que décris dans l'article Installer et configurer Apache 2 sur Debian.

Installation

Détectez l'architecture du serveur:

ARCH=$(command dpkg --print-architecture)

Téléchargez la dernière version du module:

command wget "https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_${ARCH}.deb" \
--output-document="/tmp/mod-pagespeed-stable_current_${ARCH}.deb"

Installez les dépendances:

command apt-get install apache2.2-common libc6 libgcc1 libstdc++6

Installez le module:

command dpkg -i "/tmp/mod-pagespeed-stable_current_${ARCH}.deb"

Activez le module:

command a2enmod pagespeed

Ajustez les réglages par défaut du module (entre autres, désactivez-le par défaut):

echo "# Pagespeed local defaults.
<IfModule pagespeed_module>
ModPagespeed off
ModPagespeedFileCachePath /var/mod_pagespeed/cache/
</IfModule>" \
> "/etc/apache2/conf.d/pagespeed"

Rechargez la configuration du serveur:

/etc/init.d/apache2 force-reload

Utilisation

Renseignez le nom de domaine à optimiser:

DOMAIN="www.example.com"

Déterminez le nom du fichier de configuration du VirtualHost correspondant au domaine. Ajustez-le à votre configuration si vous n'avez pas utilisé a2tools pour configurer le domaine:

DOMAIN_CONFIG="/etc/apache2/sites-available/http-${DOMAIN}"

Ajoutez la configuration de PageSpeed au fichier de configuration du domaine:

if [ -e "${DOMAIN_CONFIG}" ]; then
command sed -i -e "/<\/VirtualHost>/i\\
<IfModule pagespeed_module>\\
ModPagespeed on\\
ModPagespeedFileCachePath /var/mod_pagespeed/cache/\\
#ModPagespeedGeneratedFilePrefix /var/mod_pagespeed/files/\\
\\
# Turn this on if /var/mod_pagespeed/cache/ is on a ext3 filesystem.\\
ModPagespeedSharedMemoryLocks off\\
\\
# Declare that ${DOMAIN} is served by the localhost HTTP server.\\
# Be sure to use the correct OriginDomain. A mis-configured value\\
# can be really troublesome.\\
ModPagespeedDomain http://${DOMAIN}\\
#ModPagespeedMapOriginDomain localhost ${DOMAIN}\\
\\
# Allow to disable the core filters.\\
ModPagespeedRewriteLevel PassThrough\\
\\
# Core filters\\
#ModPagespeedEnableFilters add_head\\
ModPagespeedEnableFilters combine_css\\
ModPagespeedEnableFilters convert_meta_tags\\
ModPagespeedEnableFilters extend_cache\\
ModPagespeedEnableFilters inline_css\\
ModPagespeedEnableFilters inline_import_to_link\\
ModPagespeedEnableFilters inline_javascript\\
ModPagespeedEnableFilters rewrite_css\\
#ModPagespeedEnableFilters rewrite_images\\
ModPagespeedEnableFilters rewrite_javascript\\
ModPagespeedEnableFilters rewrite_style_attributes_with_url\\
#ModPagespeedEnableFilters trim_urls\\
\\
# Additionnal filters\\
ModPagespeedEnableFilters collapse_whitespace\\
ModPagespeedEnableFilters remove_comments\\
\\
# Disabling filters that can be troublesome.\\
#\\
# Add <head/> tags if missing. Useless.\\
ModPagespeedDisableFilters add_head\\
# Heavy server load. Can be replaced by smart image management:\\
# Compress and resize your images before uploading to server.\\
ModPagespeedDisableFilters rewrite_images\\
# No real point. Allow the browser to render the correct\\
# image dimensions without loading the image.\\
ModPagespeedDisableFilters insert_img_dimensions\\
# Break XHTML by removing attribute quotation. No real point.\\
ModPagespeedDisableFilters remove_quotes\\
# Can break SEO and cause 404 errors.\\
ModPagespeedDisableFilters trim_urls\\
\\
# Warning turning this on can cause memory leaks.\\
ModPagespeedLowercaseHtmlNames off\\
\\
# Example static content configuration (here for a Symfony based site) \\
# Configure this according to your content. This improve performances.\\
# Prevent pagespeed to fetch these ressources with a HTTP request.\\
#ModPagespeedLoadFromFile \"http://${DOMAIN}/css/\" \"/opt/${DOMAIN}/web/css/\"\\
#ModPagespeedLoadFromFile \"http://${DOMAIN}/js/\" \"/opt/${DOMAIN}/web/js/\"\\
#ModPagespeedLoadFromFile \"http://${DOMAIN}/images/\" \"/opt/${DOMAIN}/web/images/\"\\
\\
# Example pagespeed exclusion configuration (mandatory for some JS editors and frameworks)\\
ModPagespeedDisallow */tiny_fck/*\\
ModPagespeedDisallow */modules/wysiwyg/*\\
ModPagespeedDisallow */ckeditor/*\\
</IfModule>\\
" "${DOMAIN_CONFIG}"
else
echo "Error: File '${DOMAIN_CONFIG}' does not exists."
fi

Vérifiez que la configuration Apache 2 est correcte:

command apache2ctl -t

Redémarrez le serveur HTTP pour prendre en compte la nouvelle configuration:

/etc/init.d/apache2 restart

Surveillez les erreurs générées par le module PageSpeed:

command tail -f /var/log/apache2/error.log

Serveur d'origine

L'option "ModPagespeedMapOriginDomain" est très importante. Le module PageSpeed utilise cette information pour accélérer la récupération des données associées aux pages desservies.

Dans le cas où le nom de domaine du site optimisé par PageSpeed ne pointe pas vers le serveur d'origine du contenu (dans le cas d'un reverse proxy, par exemple), assurez-vous que l'option "ModPagespeedMapOriginDomain" pointe le domaine vers ce serveur.

Contenu statique

Dans le cas où l'emplacement du contenu statique du site est connu, ajustez en conséquence les options "ModPagespeedLoadFromFile".

L'utilisation systèmatique de cette directive de configuration pour le contenu statique limite la charge serveur générée par PageSpeed.

Gestion du cache

La gestion du cache de Google mod_pagespeed peut causer les erreurs suivantes:

[Fri Dec 02 09:03:59 2011] [error] [mod_pagespeed 0.10.19.4-1209 @7059] /var/mod_pagespeed/cache/rname/ce/y3_Io7zAGUEgn8lqUAo8:0: creating dir (code=31 Too many links)
[Fri Dec 02 09:03:59 2011] [error] [mod_pagespeed 0.10.19.4-1209 @7059] Could not create directories for file /var/mod_pagespeed/cache/rname/ce/y3_Io7zAGUEgn8lqUAo8/hpGQPajpyeMfeWveYprL,

L'erreur est causée par une limitation du nombre de fichiers par dossier du système de fichier ext3. Il existe deux solutions:

  1. Activer la gestion des verrous dans la mémoire partagée grâce à l'option:
        ModPagespeedSharedMemoryLocks on
    D'après mon expérience, cette option n'a que peu d'impact sur l'apparition des erreurs.
  2. Placer les dossiers ci-dessous dans un système de fichier ext4 (recommandé !):
    • /var/mod_pagespeedcache
    • /var/mod_pagespeed/cache

Erreur d'allocation mémoire avec APC

Coupler APC à Google PageSpeed peut faire apparaître cette erreur:

[apc-warning] Unable to allocate memory for pool. in /opt/mysymfonyapp/lib/vendor/symfony/lib/addon/propel/database/sfPropelDatabase.class.php on line 68

Pour résoudre ce problème, installez depuis les sources (en utilisant la commande PECL) la dernière version d'APC. Une méthode d'installation manuelle est disponible dans le guide Installer l'extension PHP APC sur Debian.

Désactivation sélective

Pour désactiver le module pagespeed uniquement pour certain fichier, utilisez l'option "ModPagespeedDisallow":

    ModPagespeedDisallow */jquery-ui-1.8.2.custom.min.js
  ModPagespeedDisallow */
js_tinyMCE.js

Cette option permet de palier aux problèmes rencontrés avec certain éditeurs Wysiwyg, et certaines bibliothèques javascript.

Filtres problèmatiques

Certains filtres du module Pagespeed peuvent poser des problèmes:

  • insert_img_dimensions: Intègre la taille des images dans le code HTML. C'est une optimisation de rendu dans le navigateur. Ce filtre augmente la charge serveur. Si votre site intègre des images d'autres domaines, désactivez ce filtre, car il peut entraîner une surconsommation mémoire.
  • rewrite_images: Ce filtre utilise beaucoup de ressources processeur et peut surcharger le contenu du cache Pagespeed, causant au long terme des pertes de performances.
  • add_head: Ajoute les entêtes <head/>. Inutile si vos sites sont bien codés.
  • trim_urls: Ce filtre peut casser certaines URLs (erreurs 404) et perturber votre référencement.
  • remove_quotes: Supprime les guillemets des attributs HTML. Le gain de taille est mineur par rapport à la charge serveur nécessaire. Le filtre collapse_whitespace est beaucoup plus intéressant de ce point de vue.

Limiter la consommation mémoire

Pour limiter les problèmes de consommation mémoire importante lorsque PageSpeed est activé, j'ai appliqué les changements suivants pour un serveur ayant 2 Go de RAM:

  • Maximum de 50 requêtes par connexion (MaxKeepAliveRequests) : permet un turn-over plus important des clients HTTP.
  • Maximum de 100 clients simultanées (MaxClients) : limite la charge maximale du serveur.
  • Maximum de 500 requêtes par tâche / thread Apache (MaxRequestsPerChild): libère plus fréquemment la mémoire utilisée par un thread.

Ces valeurs sont intuitives et doivent être ajustées aux ressources du serveur.

Mettez en place ces changements:

echo "# mod_pagespeed memory usage limitation
MaxKeepAliveRequests 50
MaxClients          100
MaxRequestsPerChild 500" \
> '/etc/apache2/conf.d/pagespeed-optimization'

Rechargez la configuration de votre serveur HTTP:

/etc/init.d/apache2 restart

Références

Ces livres peuvent vous aider:

Remerciements