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