Afficher/cacher Sommaire
Compiler et personnaliser Nginx sous Debian 8
Source : nginx.org
C’est bien connu, Nginx est incapable de charger de nouveaux modules à chaud contrairement à Apache et si vous souhaitez personnaliser votre installation de Nginx avec un module complémentaire de votre cru ou bien un module de la communauté, il va falloir recompiler Nginx à la main.
Avant de vous lancer à corps perdu dans la compilation, sachez que les dépôts Debian proposent plusieurs versions de Nginx contenant différentes options de compilation et différents modules. À vous de voir si ce que vous cherchez n’est pas déjà présent dans les dépôts. D’ailleurs en parlant de dépôt, vous vous apercevrez que ceux de la version stable de Debian 7.x proposent une ancienne version de Nginx. Nous allons donc plutôt utiliser les dépôts « backport source », afin de profiter des dernières fonctionnalités de Nginx.
Le module que je vais installer en complément est un module de limitation de bande passante qui permet d’affecter une bande passante maximale par IP, et non par connexion comme le propose nativement Nginx. Ce module s’intitule nginx_limit_speed_module et les sources sont disponibles sur GitHub.
Debian 7 ,vérifier la présence des dépôts Backports
Les dépôts Backports permettent d’intégrer à votre version stable de Debian un paquet issu de la version Testing. En effet lorsqu’un paquet est publié en version Debian Stable, celui-ci n’est normalement plus mis à jour en termes de nouvelles fonctionnalités. Seuls les correctifs de sécurité seront publiés. C’est donc une possibilité pour obtenir les dernières version de certains paquets, tout en restant sur la version Stable de Debian.
Le fichier /etc/apt/sources.list
doit contenir les lignes suivantes :
[...]
deb http://ftp.fr.debian.org/debian/ wheezy-backports main
deb-src http://ftp.fr.debian.org/debian/ wheezy-backports main
Puis sudo apt-get update
après avoir ajouté les lignes.
Debian 8 ,vérifier la présence des dépôts sources
Les dépôts sources permettent la compilation
Le fichier /etc/apt/sources.list
doit contenir les lignes suivantes :
[...]
deb-src http://ftp.fr.debian.org/debian/ jessie-updates main
deb-src http://ftp.fr.debian.org/debian/ jessie main
deb-src http://security.debian.org/ jessie/updates main
Puis sudo apt-get update
après avoir ajouté les lignes.
Récupérer les sources Nginx depuis les dépôts
Maintenant que les dépôts sont correctement configurés, nous allons récupérer les sources Nginx.
Mais avant nous allons installer quelques dépendances contenant les outils nécessaires à la compilation, ainsi que les dépendances Nginx.
sudo apt-get install unzip
Pour la compilation, et…
sudo apt-get build-dep nginx
… pour les dépendances. Il ne reste plus qu’à récupérer les sources.
Les placer dans /usr/src/nginx-custom
Créer et se placer dans le dossier puis télécharger les sources :
sudo mkdir /usr/src/nginx-custom
cd /usr/src/nginx-custom
sudo apt-get source nginx
Personnaliser l’installation de Nginx
Normalement votre dossier doit ressembler à quelque chose comme ceci :
ls -l
total 1400
drwxr-xr-x 10 root root 4096 août 25 14:09 nginx-1.6.2
-rw-r--r-- 1 root root 609344 juin 1 12:19 nginx_1.6.2-5+deb8u2.debian.tar.xz
-rw-r--r-- 1 root root 2873 juin 1 12:19 nginx_1.6.2-5+deb8u2.dsc
-rw-r--r-- 1 root root 804164 févr. 10 2016 nginx_1.6.2.orig.tar.gz
Pour ajouter le nouveau module, il faut aller dans le dossier nginx-1.6.2 :
cd /usr/src/nginx-custom/nginx-1.6.2/debian/modules
Et c’est ici qu’il faut copier les modules supplémentaires.
Ils sont en majorité sur GitHub ,faire juste un git clone.
Chiffrement déchiffrement pour les variables nginx
git clone https://github.com/openresty/encrypted-session-nginx-module.git
Capacité d’échappement,encodage et décodage hexa,MD5,SHA1,Bsae32,Base64 ,etc…
git clone https://github.com/openresty/set-misc-nginx-module
Le dossier doit ressembler à ceci :
ls -l
total 60
drwxr-xr-x 6 root root 4096 août 25 14:20 encrypted-session-nginx-module
drwxr-xr-x 6 root root 4096 févr. 10 2016 headers-more-nginx-module
drwxr-xr-x 2 root root 4096 févr. 10 2016 nginx-auth-pam
drwxr-xr-x 3 root root 4096 févr. 10 2016 nginx-cache-purge
drwxr-xr-x 2 root root 4096 févr. 10 2016 nginx-dav-ext-module
drwxr-xr-x 9 root root 4096 févr. 10 2016 nginx-development-kit
drwxr-xr-x 6 root root 4096 févr. 10 2016 nginx-echo
drwxr-xr-x 4 root root 4096 févr. 10 2016 nginx-http-push
drwxr-xr-x 9 root root 4096 févr. 10 2016 nginx-lua
drwxr-xr-x 3 root root 4096 févr. 10 2016 nginx-upload-progress
drwxr-xr-x 2 root root 4096 févr. 10 2016 nginx-upstream-fair
drwxr-xr-x 2 root root 4096 févr. 10 2016 ngx-fancyindex
drwxr-xr-x 5 root root 4096 févr. 10 2016 ngx_http_substitutions_filter_module
-rw-r--r-- 1 root root 1525 févr. 10 2016 README.Modules-versions
drwxr-xr-x 6 root root 4096 août 25 14:21 set-misc-nginx-module
Configurer la compilation
Maintenant que notre module a été ajouté aux sources, il va falloir ajouter quelques paramètres au processus de compilation pour que le module soit pris en compte.
Pour cela, il va falloir éditer le fichier /usr/src/nginx-custom/nginx-1.6.2/debian/rules
et trouver les blocs qui commencent par light_configure_flags, full_configure_flags et extras_configure_flags.
Chacun de ces blocs définissent les options de compilations des différents paquets que nous obtiendront à la fin du processus.
Ils contiennent tous une ou plusieurs lignes commençant par –add-module. Vous l’avez deviné, c’est par ici que ça se passe ! Personnellement comme je ne souhaite modifier que la version «extra», je modifie le bloc extras_configure_flags :
extras_configure_flags := \
$(common_configure_flags) \
[...]
--add-module=$(MODULESDIR)/ngx_http_substitutions_filter_module \
--add-module=$(MODULESDIR)/encrypted-session-nginx-module \
--add-module=$(MODULESDIR)/set-misc-nginx-module
Modification fichier du module « fancyindex » pour avoir 500 caractères max par ligne :
cd /usr/src/nginx-custom/nginx-1.6.2/debian/modules/ngx-fancyindex/
sudo nano ngx_http_fancyindex_module.c
Modifier la ligne suivante
#define NGX_HTTP_FANCYINDEX_NAME_LEN 500
Mise à jour du changelog
Cette étape permet d’éviter d’avoir des conflits de version.
Éditez le fichier /usr/src/nginx-custom/nginx-1.6.2/debian/changelog
, et ajoutez par exemple ‘-yan’ au numéro de version.
nginx (1.6.2-5+deb8u2-yan) jessie-security; urgency=medium
[ Christos Trochalakis ]
Compilation
Le moment est venu de compiler !
Placez-vous dans le dossier /usr/src/nginx-custom/nginx-1.6.2
cd /usr/src/nginx-custom/nginx-1.6.2
Installer les dépendances manquantes
sudo apt install autotools-dev dh-systemd libgd2-dev libgeoip-dev libluajit-5.1-dev libmhash-dev libpam0g-dev libpcre3-dev libperl-dev libxslt1-dev
Lancez la commande suivante pour la compilation :
sudo dpkg-buildpackage -b
À la fin du processus, le dossier /usr/src/nginx-custom doit contenir nos nouveaux paquets :
total 13028
drwxr-xr-x 10 root root 4096 août 25 13:35 nginx-1.6.2
-rw-r--r-- 1 root root 72238 août 25 15:58 nginx_1.6.2-5+deb8u2-custom_all.deb
-rw-r--r-- 1 root root 4055 août 25 15:58 nginx_1.6.2-5+deb8u2-custom_amd64.changes
-rw-r--r-- 1 root root 609344 juin 1 12:19 nginx_1.6.2-5+deb8u2.debian.tar.xz
-rw-r--r-- 1 root root 2873 juin 1 12:19 nginx_1.6.2-5+deb8u2.dsc
-rw-r--r-- 1 root root 804164 févr. 10 2016 nginx_1.6.2.orig.tar.gz
-rw-r--r-- 1 root root 86606 août 25 15:58 nginx-common_1.6.2-5+deb8u2-custom_all.deb
-rw-r--r-- 1 root root 83818 août 25 15:58 nginx-doc_1.6.2-5+deb8u2-custom_all.deb
-rw-r--r-- 1 root root 595002 août 25 15:58 nginx-extras_1.6.2-5+deb8u2-custom_amd64.deb
-rw-r--r-- 1 root root 4975024 août 25 15:58 nginx-extras-dbg_1.6.2-5+deb8u2-custom_amd64.deb
-rw-r--r-- 1 root root 429670 août 25 15:58 nginx-full_1.6.2-5+deb8u2-custom_amd64.deb
-rw-r--r-- 1 root root 3141562 août 25 15:58 nginx-full-dbg_1.6.2-5+deb8u2-custom_amd64.deb
-rw-r--r-- 1 root root 332540 août 25 15:58 nginx-light_1.6.2-5+deb8u2-custom_amd64.deb
-rw-r--r-- 1 root root 2176366 août 25 15:58 nginx-light-dbg_1.6.2-5+deb8u2-custom_amd64.deb
J’ai eu quelques souci pour compiler à cause d’une clé GPG manquante pour signer les paquets.
La signature de paquet n’est pas obligatoire et peut être passée en ajoutant l’option -uc. OU vous pouvez toujours chercher la clé manquante sur Internet
Installation de notre version de Nginx
Après la compilation, l’installation !
Vous l’avez vu on se retrouve avec différentes versions de Nginx correspondant en fait aux différentes versions proposées dans les dépôts.
Vous trouvez plus d’informations concernant ces différences sur wiki Debian.
Par défaut, lorsque vous installez le paquet « nginx », on veut la version extra
sudo dpkg -i nginx-extras_1.6.2-5+deb8u2-custom_amd64.deb nginx-common_1.6.2-5+deb8u2-custom_all.deb
nginx_1.6.2-5+deb8u2-custom_all.deb
Pourquoi installer trois paquets ?
Le premier correspond à la version de Nginx choisie, les deux autres contiennent des dépendances indispensables.
Si jamais vous rencontrez d’autres problèmes de dépendances supplémentaires, utilisez :
sudo apt-get -f install
Et voilà, vous disposez maintenant d’une version de Nginx personnalisée !
sudo nginx -V
devrait afficher vos modules supplémentaires