Installer NGinx avec PageSpeed et HTTP 2 – MAJ

Dans le billet précédent j’ai expliqué qu’il était assez simple, c’est à dire sans compilation, d’installer NGinx avec pagespeed. Cependant NGinx depuis la version 1.9.5 (à l’heure ou j’ecris ce billet nous en sommes à la 1.9.12) prend en charge HTTP 2. Cependant je souhaitais installer NGinx avec PageSpeed et HTTP 2 puisque les gains de performances avec cette nouvelle performance du procotole HTTP semblent assez bluffants.

Malheureusement ici le dépot dotdeb ne nous sera d’aucune utilité puisque celui-ci ne permet que l’installation de NGinx 1.8.1. Nous allons donc devoir compiler NGinx afin d’ajouter le support du module pagespeed, la procédure est donc plus compliquée qu’une installation basique mais reste acceptable.

 

Avant de commencer je vous conseille d’effectuer ces opérations sur votre ordinateur (via une machine virtuelle si vous êtes sous Windows)

 

Configuration du dépôt officiel NGinx

Afin de pouvoir récupérer la dernière version de NGinx et ses sources nous allons devoir ajouter le dépôt officiel de NGinx. Lançons donc les commandes suivantes

echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list
echo "deb-src http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list

 

Récupérons la clé GPG qui permet de signer les paquets

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

 

Nous pouvons mettre la liste des paquets à jour

sudo apt-get update

 

 

Installation des dépendances

Installons les paquets requis pour pouvoir compiler

sudo apt-get -y install build-essential devscripts debhelper libparse-debcontrol-perl zlib1g-dev libpcre3 libpcre3-dev unzip dpkg-dev openssl libssl-dev libperl-dev libxslt-dev libgd2-xpm-dev libgeoip-dev

 

Meme chose mais pour NGinx

sudo apt-get build-dep nginx

 

 

Téléchargement des sources

Téléchargeons les sources NGinx

sudo apt-get source nginx

 

Vous devriez alors récupérer plusieurs fichiers et un dossier contenant les sources

root@noobunbox:~# ls
nginx-1.9.12 
nginx_1.9.12-1~jessie.debian.tar.xz 
nginx_1.9.12.orig.tar.gz
nginx_1.9.12-1~jessie.dsc

 

Créez le répertoire qui contiendra notre module

cd nginx-1.9.12/debian/
mkdir modules && cd modules

 

Récupérez le numéro de version de PageSpeed

sudo curl -s https://developers.google.com/speed/pagespeed/module/build_ngx_pagespeed_from_source | grep NPS_VERSION=

 

Téléchargeons les sources de PageSpeed

$ NPS_VERSION=le numéro retourné par la commande précédente
sudo wget -O ngx_pagespeed-${NPS_VERSION}-beta.zip \
    https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip
sudo unzip ngx_pagespeed-${NPS_VERSION}-beta.zip
cd ngx_pagespeed-release-${NPS_VERSION}-beta/
sudo wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
sudo tar -xzvf ${NPS_VERSION}.tar.gz

 

 

Configuration du paquet

Modifions le fichier de configuration du paquet

sudo nano ~/nginx-1.9.12/debian/rules

 

Ajoutons la ligne de configuration MODULESDIR = $(CURDIR)/debian/modules qui permettra de trouver le module au moment de la compilation

#!/usr/bin/make -f

#export DH_VERBOSE=1
MODULESDIR = $(CURDIR)/debian/modules
CFLAGS ?= $(shell dpkg-buildflags --get CFLAGS)
LDFLAGS ?= $(shell dpkg-buildflags --get LDFLAGS)

 

Modifiez la fin de la section override_dh_auto_build en y ajoutant --add-module=$(MODULESDIR)/ngx_pagespeed-release-1.XX.XX.X-beta \ (attention remplacez les XX en fonction de votre version du module PageSpeed), ce qui nous donne :

[...]
 $(WITH_HTTP2) \
 --add-module=$(MODULESDIR)/ngx_pagespeed-release-1.X.XX.XX-beta \
 --with-cc-opt="$(CFLAGS)" \
 --with-ld-opt="$(LDFLAGS)" \
 --with-ipv6
[...]

 

Votre fichier de configuration devrait donc ressembler à celui-ci

#!/usr/bin/make -f

#export DH_VERBOSE=1
MODULESDIR = $(CURDIR)/debian/modules
CFLAGS ?= $(shell dpkg-buildflags --get CFLAGS)
LDFLAGS ?= $(shell dpkg-buildflags --get LDFLAGS)
WITH_HTTP2 := $(shell printf \
 "Source: nginx\nBuild-Depends: libssl-dev (>= 1.0.1)\n" | \
 dpkg-checkbuilddeps - >/dev/null 2>&1 && \
 echo "--with-http_v2_module")
COMMON_CONFIGURE_ARGS := \
 --prefix=/etc/nginx \
 --sbin-path=/usr/sbin/nginx \
 --modules-path=/etc/nginx/modules \
 --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-http_auth_request_module \
 --with-http_xslt_module=dynamic \
 --with-http_image_filter_module=dynamic \
 --with-http_geoip_module=dynamic \
 --with-threads \
 --with-stream \
 --with-stream_ssl_module \
 --with-http_slice_module \
 --with-mail \
 --with-mail_ssl_module \
 --with-file-aio \
 $(WITH_HTTP2) \
 --add-module=$(MODULESDIR)/ngx_pagespeed-release-1.XX.XX.XX-beta \
 --with-cc-opt="$(CFLAGS)" \
 --with-ld-opt="$(LDFLAGS)" \
 --with-ipv6

%:
 dh $@

override_dh_auto_configure: configure_debug

override_dh_strip:
 dh_strip --dbg-package=nginx-dbg

override_dh_auto_build:
 dh_auto_build
 mv objs/nginx objs/nginx-debug
 mv objs/ngx_http_xslt_filter_module.so objs/ngx_http_xslt_filter_module-debug.so
 mv objs/ngx_http_image_filter_module.so objs/ngx_http_image_filter_module-debug.so
 mv objs/ngx_http_geoip_module.so objs/ngx_http_geoip_module-debug.so
 CFLAGS="" ./configure $(COMMON_CONFIGURE_ARGS)
 dh_auto_build

configure_debug:
 CFLAGS="" ./configure $(COMMON_CONFIGURE_ARGS) \
 --with-debug

override_dh_auto_install:
 sed -e 's/%%PROVIDES%%/nginx/g' \
 -e 's/%%DEFAULTSTART%%/2 3 4 5/g' \
 -e 's/%%DEFAULTSTOP%%/0 1 6/g' \
 < debian/init.d.in > debian/init.d
 dh_auto_install
 mkdir -p debian/nginx/etc/init.d debian/nginx/etc/default \
 debian/nginx/usr/lib/nginx/modules
 sed -e 's/%%PROVIDES%%/nginx-debug/g' \
 -e 's/%%DEFAULTSTART%%//g' \
 -e 's/%%DEFAULTSTOP%%/0 1 2 3 4 5 6/g' \
 < debian/init.d.in > debian/debug.init.d
 /usr/bin/install -m 755 debian/debug.init.d \
 debian/nginx/etc/init.d/nginx-debug
 /usr/bin/install -m 644 debian/nginx-debug.default \
 debian/nginx/etc/default/nginx-debug
 /usr/bin/install -m 644 debian/nginx.conf debian/nginx/etc/nginx/
 /usr/bin/install -m 644 conf/win-utf debian/nginx/etc/nginx/
 /usr/bin/install -m 644 conf/koi-utf debian/nginx/etc/nginx/
 /usr/bin/install -m 644 conf/koi-win debian/nginx/etc/nginx/
 /usr/bin/install -m 644 conf/mime.types debian/nginx/etc/nginx/
 /usr/bin/install -m 644 conf/scgi_params debian/nginx/etc/nginx/
 /usr/bin/install -m 644 conf/fastcgi_params debian/nginx/etc/nginx/
 /usr/bin/install -m 644 conf/uwsgi_params debian/nginx/etc/nginx/
 /usr/bin/install -m 644 html/index.html \
 debian/nginx/usr/share/nginx/html/
 /usr/bin/install -m 644 html/50x.html \
 debian/nginx/usr/share/nginx/html/
 /usr/bin/install -m 644 debian/nginx.vh.default.conf \
 debian/nginx/etc/nginx/conf.d/default.conf
 /usr/bin/install -m 755 objs/nginx debian/nginx/usr/sbin/
 /usr/bin/install -m 755 objs/nginx-debug debian/nginx/usr/sbin/
 cd debian/nginx/etc/nginx && /bin/ln -s \
 ../../usr/lib/nginx/modules modules && cd -

override_dh_clean:
 dh_clean
 rm -f debian/*init.d

 

 

Compilation de NGinx avec PageSpeed et HTTP 2

Avant de lancer la compilation en elle même nous allons ajouter une entrée au changelog

dch -i "Added mod_pagespeed"

 

La compilation du paquet peut être lancée via la commande suivante (le processus va prendre quelques minutes)

cd ~/nginx-1.9.12
dpkg-buildpackage -b -us -uc
cd ..

 

 

Installation de NGinx avec PageSpeed et HTTP 2

Lancez la commande suivante afin d’installer le paquet

sudo dpkg -i nginx_1.9.12-1~{VOTRE-VERSION}_amd64.deb

 

Afin d’être sûr que votre version de NGinx avec Pagespeed et HTTP2 ne soit pas remplacée par une mise à jour venant des dépôts officiels changeons le statut du paquet

sudo apt-mark hold nginx

 

Vérifiez que le statut du paquet soit bien en « hold »

sudo dpkg --get-selections | grep nginx

 

 

Test de la configuration de NGinx avec PageSpeed et HTTP 2

Pour cela il vous suffit de lancer la commande suivante

nginx -V

 

Ce qui nous donne

root@noobunbox:~# nginx -V
nginx version: nginx/1.9.12
built by gcc 4.9.2 (Debian 4.9.2-10)
built with OpenSSL 1.0.1k 8 Jan 2015
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/etc/nginx/modules --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-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --add-module=/root/nginx-1.9.12/debian/modules/ngx_pagespeed-release-1.10.33.5-beta --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security' --with-ld-opt=-Wl,-z,relro --with-ipv6

 

 

Mise à jour

Ici pas de mise à jour via apt, il faudra répéter tout le processus lorsque PageSpeed et NGinx seront mis à jour.

 

Source

Roll Your Own Network, roll.urown.net,  Install Nginx from Source