Nginx Installation · 11 min read · Jan 23, 2026

Construire Nginx à partir des sources sur Debian Squeeze

Construire Nginx à partir des sources sur Debian Squeeze

Version 1.0
Auteur : Michel Käser

Ce tutoriel décrit comment vous pouvez construire nginx à partir des sources sur Debian Squeeze. De plus, nous inclurons quelques modules tiers utiles comme le WAF naxsi (pare-feu d’application web), SPDY, etc.

À la fin, vous aurez une installation nginx entièrement fonctionnelle.

Je ne donne aucune garantie que cela fonctionnera pour vous !

1 Exigences

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • un serveur dédié exécutant Debian Squeeze
  • environ 30 minutes de temps pour lire attentivement

2 Remarques préliminaires

Dans ce tutoriel, nous utiliserons la version de développement de nginx comme base source. Veuillez noter que ces versions peuvent être instables et ne sont pas recommandées pour une utilisation sur un serveur de production.

Cependant, certains modules comme SPDY nécessitent la version 1.3.1x ou ultérieure de nginx - et personnellement, je dirais qu’il est plus ou moins sûr d’utiliser la version de développement de nginx car il n’y a pas d’exploits connus.

3 Prérequis

Étant donné que nginx est écrit en langage de programmation C, nous devrons installer certains paquets qui nous aideront à construire/compresser le code source. Je suis un grand fan du gestionnaire de paquets apt, mais vous pouvez également utiliser aptitude, etc. :

apt-get -y install build-essential zlib1g-dev libpcre3 libpcre3-dev libbz2-dev libssl-dev tar unzip

Cela installera tous les paquets requis comme gcc et make.

4 Téléchargement de la source de nginx

La dernière version de nginx peut être trouvée sur le site suivant : nginx.org/en/download.html. Au moment de l’écriture, c’est 1.3.12 - donc nous allons télécharger :

cd /tmp  
wget http://nginx.org/download/nginx-1.3.12.tar.gz

et décompresser la source :

tar -xzvf nginx-1.3.12.tar.gz

Nous ne construirons pas encore notre version de nginx, car nous allons d’abord télécharger quelques modules tiers que nous inclurons plus tard.

5 Modules tiers supplémentaires

Contrairement à Apache HTTPd, qui prend en charge le chargement dynamique des modules (c’est pourquoi nous pouvons les installer à partir des dépôts), nginx n’inclut pas une telle fonctionnalité - et d’après ce que j’ai lu, ce n’est pas quelque chose qui est prévu dans un avenir proche.

Nous devons donc décider tôt quels modules nous voulons inclure dans notre installation personnalisée. Il y a un joli aperçu/tableau sur le site officiel de nginx listant les plus populaires : wiki.nginx.org/3rdPartyModules.
Comme cela n’inclut pas tous les modules disponibles, je vous recommande de faire une recherche Google comme : module redis nginx github si vous recherchez un module particulier - beaucoup d’entre eux sont hébergés sur Github.

5.1 Téléchargement des modules

Pour ce tutoriel, nous allons télécharger quelques modules vraiment géniaux comme naxsi, SPDY et quelques autres moins connus.

headers_more

Commençons par headers_more. Vous pouvez l’utiliser pour cacher complètement les informations du serveur web par exemple, pour améliorer la sécurité du serveur :

mkdir /tmp/nginx-modules  
cd /tmp/nginx-modules  
wget https://github.com/agentzh/headers-more-nginx-module/archive/v0.19.tar.gz  
tar -xzvf v0.19.tar.gz

Cela téléchargera la version la plus récente et la décompressera. Assurez-vous de consulter le dépôt officiel de temps en temps pour voir s’il y a une nouvelle version disponible (cela vaut pour tous les autres modules également).

Cache Purge

Vous n’aurez peut-être pas besoin de ce module pour votre configuration. Si vous avez cependant nginx devant Apache, agissant comme un proxy inverse et mettant en cache les résultats de proxy_pass, cela pourrait être un atout ! Sinon, passez votre chemin :

wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.0.tar.gz  
tar -xzvf 2.0.tar.gz

naxsi

Naxsi est un module de pare-feu d’application web open source, haute performance, à faible maintenance des règles, pour nginx - très similaire à mod_security en termes de fonctionnalité. Nous l’utiliserons pour sécuriser les applications web de nos clients :

wget http://naxsi.googlecode.com/files/naxsi-core-0.49.tgz  
tar -xzvf naxsi-core-0.49.tgz

SPDY

SPDY est un module qui permet à votre serveur web de tirer parti des fonctionnalités SPDY comme le multiplexage de flux et la compression d’en-tête, et beaucoup de gens en parlent comme d’un nouveau standard (ce qui semble être le cas).

Mise à niveau d’OpenSSL

Il nécessite OpenSSL 1.0.1+, quelque chose que nous n’avons pas sur notre machine Squeeze par défaut. Nous utiliserons le dépôt de test de Debian dans ce tutoriel pour l’installer. Vous pouvez cependant le compiler à partir des sources ou vérifier d’autres dépôts également.

nano /etc/apt/sources.list

et coller les lignes suivantes :

deb http://ftp.debian.org/debian/ testing main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free

Nous devrions maintenant empêcher notre serveur de mettre à niveau d’autres paquets vers la version testing. Nous pouvons le faire en créant/modifiant le fichier /etc/apt/apt.conf.d/releases : ``` nano /etc/apt/apt.conf.d/releases ``` et coller : ``` APT::Default-Release "squeeze"; ``` Attention : Si vous faites référence à des dépôts stables avec stable dans votre sources.list, vous devez remplacer squeeze par stable dans le texte ci-dessus. Maintenant, nous pouvons *safement* exécuter : ``` apt-get update apt-get -t testing install openssl ``` ce qui mettra à niveau/installera la version existante d'OpenSSL. #### Application du patch Actuellement, il n'y a aucun moyen de l'inclure comme d'autres modules, il est plutôt fourni comme un patch pour le code source de nginx. Le readme officiel peut être trouvé ici : nginx.org/patches/spdy/README.txt ``` cd /tmp/nginx-1.3.12 wget http://nginx.org/patches/spdy/patch.spdy.txt patch -p1 < patch.spdy.txt ``` cela devrait faire toute la magie pour nous. ### 6 Construction de nginx Jusqu'à présent, nous avons téléchargé la source de nginx, quelques modules tiers supplémentaires pour cela et appliqué le patch SPDY. Il est maintenant temps de construire notre installation nginx. C'est comme avec toutes les applications C - un processus en 3 étapes. Nous allons passer par la première étape plus en détail : ``` ./configure --help ``` Cela vous montrera une liste de toutes les options de configuration disponibles pour la construction, comme quels modules peuvent être désactivés, activés, etc. La mienne ressemble à ceci (abrégée) : ``` --help afficher ce message --prefix=PATH définir le préfixe d'installation --sbin-path=PATH définir le chemin binaire de nginx --conf-path=PATH définir le chemin de nginx.conf --error-log-path=PATH définir le chemin du journal des erreurs --pid-path=PATH définir le chemin de nginx.pid --lock-path=PATH définir le chemin de nginx.lock --user=USER définir l'utilisateur non privilégié pour les processus de travail --group=GROUP définir le groupe non privilégié pour les processus de travail --builddir=DIR définir le répertoire de construction --with-rtsig_module activer le module rtsig --with-select_module activer le module select --without-select_module désactiver le module select --with-poll_module activer le module poll --without-poll_module désactiver le module poll --with-file-aio activer le support AIO de fichier --with-ipv6 activer le support IPv6 --with-http_ssl_module activer ngx_http_ssl_module [...] --with-http_stub_status_module activer ngx_http_stub_status_module --without-http_charset_module désactiver ngx_http_charset_module [...] --without-http_browser_module désactiver ngx_http_browser_module --without-http_upstream_ip_hash_module désactiver ngx_http_upstream_ip_hash_module --without-http_upstream_least_conn_module désactiver ngx_http_upstream_least_conn_module --without-http_upstream_keepalive_module désactiver ngx_http_upstream_keepalive_module --with-http_perl_module activer ngx_http_perl_module --with-perl_modules_path=PATH définir le chemin des modules Perl --with-perl=PATH définir le chemin binaire de perl --http-log-path=PATH définir le chemin du journal d'accès http --http-client-body-temp-path=PATH définir le chemin pour stocker les fichiers temporaires du corps de requête http --http-proxy-temp-path=PATH définir le chemin pour stocker les fichiers temporaires du proxy http --http-fastcgi-temp-path=PATH définir le chemin pour stocker les fichiers temporaires fastcgi http --http-uwsgi-temp-path=PATH définir le chemin pour stocker les fichiers temporaires uwsgi http --http-scgi-temp-path=PATH définir le chemin pour stocker les fichiers temporaires scgi http --without-http désactiver le serveur HTTP --without-http-cache désactiver le cache HTTP --with-mail activer le module proxy POP3/IMAP4/SMTP [...] --without-mail_smtp_module désactiver ngx_mail_smtp_module --with-google_perftools_module activer ngx_google_perftools_module --with-cpp_test_module activer ngx_cpp_test_module --add-module=PATH activer un module externe --with-cc=PATH définir le chemin du compilateur C [...] --with-cpu-opt=CPU construire pour le CPU spécifié, valeurs valides : pentium, pentiumpro, pentium3, pentium4, athlon, opteron, sparc32, sparc64, ppc64 --without-pcre désactiver l'utilisation de la bibliothèque PCRE [...] --with-pcre-jit construire PCRE avec support de compilation JIT --with-md5=DIR définir le chemin vers les sources de la bibliothèque md5 --with-md5-opt=OPTIONS définir des options de construction supplémentaires pour md5 --with-md5-asm utiliser les sources assembleur md5 --with-sha1=DIR définir le chemin vers les sources de la bibliothèque sha1 --with-sha1-opt=OPTIONS définir des options de construction supplémentaires pour sha1 --with-sha1-asm utiliser les sources assembleur sha1 --with-zlib=DIR définir le chemin vers les sources de la bibliothèque zlib --with-zlib-opt=OPTIONS définir des options de construction supplémentaires pour zlib --with-zlib-asm=CPU utiliser les sources assembleur zlib optimisées pour le CPU spécifié, valeurs valides : pentium, pentiumpro --with-libatomic forcer l'utilisation de la bibliothèque libatomic_ops --with-libatomic=DIR définir le chemin vers les sources de la bibliothèque libatomic_ops --with-openssl=DIR définir le chemin vers les sources de la bibliothèque OpenSSL --with-openssl-opt=OPTIONS définir des options de construction supplémentaires pour OpenSSL --with-debug activer la journalisation de débogage ``` Cela vous aidera beaucoup à décider quels modules vous souhaitez inclure/exclure, ainsi que ce qui peut être défini d'autre. Nous allons utiliser la commande de configuration suivante : ``` ./configure \ --prefix=/usr/share/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/access.log \ --user=www-data \ --group=www-data \ --without-mail_pop3_module \ --without-mail_imap_module \ --without-mail_smtp_module \ --without-http_fastcgi_module \ --without-http_uwsgi_module \ --without-http_scgi_module \ --without-http_memcached_module \ --with-ipv6 \ --with-http_ssl_module \ --with-http_spdy_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --add-module=/tmp/nginx-modules/headers-more-nginx-module-0.19 \ --add-module=/tmp/nginx-modules/naxsi-core-0.49/naxsi_src \ --add-module=/tmp/nginx-modules/ngx_cache_purge-2.0 ``` qui exclura tout ce qui est lié au mail et aux gestionnaires dont nous n'avons pas besoin (vous pourriez en avoir besoin si vous ne fonctionnez pas en tant que proxy inverse !) et inclura nos modules tiers téléchargés et le patch SPDY. J'ai utilisé les chemins standards de Debian ici, mais n'hésitez pas à les modifier. Ensuite, nous pouvons compiler la source : ``` make ``` Attention : Si cela génère des erreurs, vous devez les lire attentivement pour voir où se trouve le problème et ce qu'il est. Enfin, installez la source compilée : ``` make install ``` Cela copiera tous les fichiers aux emplacements corrects. C'est fait ! ### 7 Activer le démarrage automatique Debian utilise des scripts d'initialisation à travers lesquels vous pouvez contrôler le comportement du service. J'utilise celui du paquet officiel nginx - tous les crédits reviennent à son mainteneur : ``` #!/bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: démarre le serveur web nginx # Description: démarre nginx en utilisant start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/nginx NAME=nginx DESC=nginx # Inclure nginx par défaut si disponible if [ -f /etc/default/nginx ]; then . /etc/default/nginx fi test -x $DAEMON || exit 0 set -e . /lib/lsb/init-functions test_nginx_config() { if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1; then return 0 else $DAEMON -t $DAEMON_OPTS return $? fi } case "$1" in start) echo -n "Démarrage de $DESC : " test_nginx_config # Vérifiez si l'ULIMIT est défini dans /etc/default/nginx if [ -n "$ULIMIT" ]; then # Définir les ulimits ulimit $ULIMIT fi start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Arrêt de $DESC : " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Redémarrage de $DESC : " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON || true sleep 1 test_nginx_config # Vérifiez si l'ULIMIT est défini dans /etc/default/nginx if [ -n "$ULIMIT" ]; then # Définir les ulimits ulimit $ULIMIT fi start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Rechargement de la configuration de $DESC : " test_nginx_config start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; configtest|testconfig) echo -n "Test de la configuration de $DESC : " if test_nginx_config; then echo "$NAME." else exit $? fi ;; status) status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $? ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2 exit 1 ;; esac exit 0 ``` N'oubliez pas dechmod` : chmod 755 /etc/init.d/nginx Nous pouvons également créer un fichier par défaut de style Debian : nano /etc/default/nginx et coller : # Note : Vous voudrez peut-être consulter la page suivante avant de définir l'ULIMIT. # http://wiki.nginx.org/CoreModule#worker_rlimit_nofile # Définir la variable ulimit si vous avez besoin de modifier les valeurs par défaut. # Exemple : ULIMIT="-n 4096" #ULIMIT="-n 4096" Dernier point mais non le moindre, si vous souhaitez démarrer nginx au démarrage, vous pouvez exécuter : update-rc.d nginx defaults ### 8 Directives de module spéciales Nous ne passerons pas en revue la configuration de nginx et les fichiers vhost ici, mais les directives suivantes de nos modules sont intéressantes : # Module SPDY (vhost) listen 443 ssl spdy; # Module more_headers (http) more_clear_headers 'Server'; # supprime les informations du serveur #### naxsi naxsi est un peu plus complexe. Tout d’abord, les règles de configuration globales doivent être incluses dans la section http du fichier de configuration de nginx : nano /etc/nginx/nginx.conf et coller : http { [...] include /etc/nginx/naxsi_core.rules; [...] } Attention : Assurez-vous que ce fichier existe. Vous pouvez copier les fichiers de configuration de naxsi à partir de l’archive téléchargée (voir : Modules tiers supplémentaires). Ensuite, vous devez inclure les règles par défaut dans votre modèle de vhost : [...] location / { include /etc/nginx/naxsi.rules; [...] } [...] et un emplacement pour les requêtes bloquées : [...] location /blocked { return 403; #proxy_pass http://127.0.0.1:4242; # mode d'apprentissage } [...] Attention : Assurez-vous que l’emplacement pour les requêtes bloquées correspond à celui du fichier de configuration /etc/nginx/naxsi.rules : LearningMode; SecRulesEnabled; #SecRulesDisabled; DeniedUrl "/blocked"; [...] Comme vous pouvez le voir, naxsi a quelques options étranges, mais elles ne sont pas étranges. Vous devriez consulter leur documentation pour lire comment le faire fonctionner au mieux. Un indice que j’ai cherché très longtemps : Vous devez exécuter un script python et lui passer les requêtes bloquées pendant le mode d’apprentissage pour créer une liste blanche pour les fausses alertes. ### 9 Liens / Crédits - http://code.google.com/p/naxsi/ - http://nginx.org/ - https://www.rackster.ch/

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.