NGinx contrairement à Apache ne prend pas en charge l’ajout de modules à chaud, cela signifie que si vous souhaitez ajouter un nouveau module à votre instance NGinx vous devez télécharger les sources de NGinx et le compiler avec votre nouveau module. Il existe cependant plusieurs versions du paquet NGinx dans les dépôts Debian, malheureusement aucune d’entre elles ne vous permettra d’installer NGinx avec PageSpeed.
Cependant les mainteneurs du dépôt dotdeb, dont j’ai déjà fait mention dans le billet consacré à l’installation de PHP 7.0, mettent à notre disposition une version du paquet NGinx pré-compilée avec le module PageSpeed, cool non ?
Installation du dépot dotdeb
Si ce n’est pas déjà fait, configurez aptitude afin qu’il prenne en charge les paquets dotdeb
Modifions notre fichier sources.list
sudo nano /etc/apt/sources.list
Ajoutons les lignes suivantes
deb http://packages.dotdeb.org jessie all deb-src http://packages.dotdeb.org jessie all
Récupérons et installons la clé GnuPG
wget https://www.dotdeb.org/dotdeb.gpg sudo apt-key add dotdeb.gpg
Mettez à jour la liste des paquets disponibles
sudo apt-get update
Installation d’NGinx avec PageSpeed
Dans le dépôt dotdeb il existe, comme dans le dépôt officiel de Debian, 3 versions d’NGinx. Ici c’est la version nginx-extras qui nous intéresse, on peut facilement avoir plus d’informations sur ce paquet via la commande suivante
sudo apt-cache show nginx-extras
Voici les modules que le packager à ajouté au paquet nginx-extras
MODULES ADDED BY DOTDEB : Gunzip, File AIO, Thread pool, X-rid header, Push stream, Naxsi, Auth LDAP, Pinba, PageSpeed, X-rid header, RTMP Description-md5: 5a840c4d354d53e2719056018118719c Homepage: http://nginx.net
L’installation d’NGinx avec PageSpeed se résume donc à la commande suivante
sudo apt-get install nginx-extras
Préparation de la mise en cache du module en RAM
Dans le fichier de configuration global du module PageSpeed nous allons choisir de mettre le cache en RAM. Préparons donc cela :
Créons le répertoire qui contiendra le cache
sudo mkdir /var/ngx_pagespeed_cache
Montons ce dossier dans tmpfs (ici 256 Mb seront utilisés vous pouvez augmenter ou réduire la taille)
sudo mount -t tmpfs -o size=256M tmpfs /var/ngx_pagespeed_cache
Afin que notre point de montage soit bien crée à chaque démarrage de notre serveur ajoutons les lignes suivantes au fichier /etc/fstab
tmpfs /var/ngx_pagespeed_cache tmpfs defaults,size=256M 0 0
Configuration d’NGinx avec PageSpeed
Commençons tout d’abord par la configuration globale du module.
sudo nano /etc/nginx/conf.d/pagespeed.conf
Ce nouveau fichier contient les directives PageSpeed qui seront chargées automatiquement dans votre instance NGinx.
Je vous conseille donc la lecture de la documentation du module afin de mieux comprendre les effets et risques, concernant le rendu d’affichage de votre site, engendrés par l’utilisation de ces filtres.
# Turning the module on and off pagespeed on; # Needs to exist and be writable by nginx. Use tmpfs for best performance. # pagespeed MemcachedServers "127.0.0.1:11211"; pagespeed FileCachePath /var/ngx_pagespeed_cache; # PageSpeed Admin pagespeed StatisticsPath /ngx_pagespeed_statistics; pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics; pagespeed MessagesPath /ngx_pagespeed_message; pagespeed ConsolePath /pagespeed_console; pagespeed AdminPath /pagespeed_admin; pagespeed GlobalAdminPath /pagespeed_global_admin; # PageSpeed Cache Purge pagespeed EnableCachePurge on; pagespeed PurgeMethod PURGE; pagespeed FileCachePath "/var/cache/pagespeed/"; pagespeed FileCacheSizeKb 102400; pagespeed FileCacheCleanIntervalMs 3600000; pagespeed FileCacheInodeLimit 500000; # pagespeed filters configuration pagespeed RewriteLevel PassThrough;
Dans notre exemple nous avons désactiver l’utilisation des filtres par défaut, je préfère les gérer / site. Nous reviendrons la dessus un peu plus tard. Maintenant créons un fichier spécifique à votre site
sudo nano /etc/nginx/common/pagespeed.conf
Ajoutons le code suivant
# PageSpeed Admin location /ngx_pagespeed_statistics { include common/acl.conf; } location /ngx_pagespeed_global_statistics { include common/acl.conf; } location /ngx_pagespeed_message { include common/acl.conf; } location /pagespeed_console { include common/acl.conf; } location ~ ^/pagespeed_admin { include common/acl.conf; } location ~ ^/pagespeed_global_admin { include common/acl.conf; } # Ensure requests for pagespeed optimized resources go to the pagespeed handler # and no extraneous headers get set. location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; } location ~ "^/pagespeed_static/" { } location ~ "^/ngx_pagespeed_beacon$" { }
Configurons maintenant les accès à vos statistiques
sudo nano /etc/nginx/common/acl.conf
Ici nous gérons les IP pouvant accéder à l’interface d’administration de PageSpeed
## Localhost + votre IP Distante allow 127.0.0.1; allow XXX.XXX.XXX.XXX deny all; ## Accès ouvert à tous ## allow all;
Installation de PageSpeed sur votre site
Activation de PageSpeed
Ouvrez la configuration NGinx de votre site
sudo nano /etc/nginx/sites-available/votre-site.com
Collez la ligne suivante
include common/pagespeed.conf;
Configuration de PageSpeed
Toujours dans la configuration de votre vhost ajoutez les filtres que vous souhaitez utilisez, voilà l’une des configuration que je vous propose (les filtres sont par défaut désactivés).
# A dé-commentez si vous utilisez Cloudflare ou un loadbalancer #pagespeed RespectXForwardedProto on; # HTTPS Support # pagespeed FetchHttps enable; ## PageSpeed Filters # Minification CSS # pagespeed EnableFilters combine_css,rewrite_css; # Minifcation Javascriot # pagespeed EnableFilters combine_javascript,rewrite_javascript; # Optimization des images #pagespeed EnableFilters lazyload_images; #pagespeed EnableFilters rewrite_images; #pagespeed EnableFilters convert_jpeg_to_progressive,convert_png_to_jpeg,convert_jpeg_to_webp,convert_to_webp_lossless; # Optimisation HTML - Supprime commentaires et espaces dans votre code #pagespeed EnableFilters remove_comments; #pagespeed EnableFilters collapse_whitespace; # CDN Support #pagespeed MapRewriteDomain cdn.example.com www.example.com;
Testons la configuration
sudo nginx -t
Si tout va bien nous pouvons recharger la configuration de NGInx
sudo service nginx reload
Sources
- Easyengine, easyengine.io, Using PageSpeed
- Angristan, angristan.fr, Mettre le cache du module PageSpeed en RAM avec tmpfs