Comment compiler Nginx avec le support de PageSpeed côté serveur afin de diminuer la latence et la taille de vos pages web.

D’après le site officiel,

PageSpeed modifie les ressources d’une page demandée sur votre serveur web pour mettre en œuvre les meilleures pratiques de performance web​​. L’idée est de baisser la latence et la consommation de bande passante de la page. Chaque optimisation est mis en œuvre comme un filtre personnalisé en PageSpeed​​. Ces filtres sont exécutés lorsque le serveur HTTP sert les actifs du site. Certains filtres modifient simplement le contenu HTML, et d’autres changent les références CSS, JavaScript, ou les images pour pointer vers des versions plus optimisées.

Installation de mod pagespeed pour Nginx

Il y a peu de chance que la version de Nginx livrée out of box par votre distribution soit PageSpeed inside. Une petite compilation s’impose, d’autant plus que Nginx ne charge pas de modules dynamiquement comme Apache2 par exemple !

Installation des dépendances

Installation réalisée sur Ubuntu 12.04 64 bits.

sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev

Téléchargement de PageSpeed

C’est la préparation du module qui sera compilé ensuite dans Nginx.

cd ~
mkdir src
cd src
wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip
unzip https://github.com/pagespeed/ngx_pagespeed/archive/master.zip
cd ngx_pagespeed-master/
wget https://dl.google.com/dl/page-speed/psol/1.7.30.2.tar.gz
tar -xzvf 1.7.30.2.tar.gz

Le dossier est décompressé en psol dans le répertoire courant.

Compilation de Nginx avec PageSpeed

Remonter dans le répertoir de départ. Les instructions suivantes sont données à titre indicatif. Elles reprennent les paramètres de compilation système Ubuntu 12.04.

Les deux seules directives réellement importantes dans notre cas sont --add-module=$HOME/src/ngx_pagespeed-master et --with-http_spdy_module.

cd ~/src
wget http://nginx.org/download/nginx-1.4.4.tar.gz
tar -xvzf nginx-1.4.4.tar.gz
cd nginx-1.4.4/
./configure --prefix=/etc/nginx --sbin-path=/opt/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx \
--with-http_ssl_module --with-http_realip_module --with-http_addition_module \
--with-http_sub_module --with-http_dav_module --with-http_flv_module \
--with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module \
--with-http_random_index_module --with-http_secure_link_module \
--with-http_stub_status_module --with-mail --with-mail_ssl_module \
--with-file-aio --with-http_spdy_module --with-ipv6 \
--add-module=$HOME/src/ngx_pagespeed-master
make
sudo make install

Configuration de Nginx pour PageSpeed

Éditer le fichier du site par défaut et ajouter:

pagespeed on;
    pagespeed FileCachePath /run/ngx_pagespeed_cache;

#  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 ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
location /ngx_pagespeed_statistics { allow all; }
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
location /pagespeed_console { allow 127.0.0.1; deny all; }

Redémarrer Nginx et consulter http://localhost/ngx_pagespeed_global_statistics pour vérifier le bon fonctionnement du module.

Vous avez un serveur Page Speed “standard”. Il existe beaucoup de possibilités de configuration qui sortent du cadre de cette installation.