Compiler NGINX

Compiler NGINX peut permettre d’augmenter la sécurité (utilisation d’une autre bibliothèque comme LibreSSL ou BoringSSL) ou en utilisant la toute dernière version d’OpenSSL. Il est également possible de directement rajouter des modules ou de supprimer ceux de base.

Préparation

Mise à jour et installation des paquets

Mise à jour des paquets déjà présents

# apt-get update

Installation des paquets nécessaires, l’option -y permet de valider automatique la confirmation d’installation

# apt-get install curl libgeoip-dev libxslt-dev libpcre3 libpcre3-dev build-essential zlib1g-dev libbz2-dev libssl-dev tar unzip curl git -y

Récupération des sources

On se place dans le dossier /usr/src/

# cd /usr/src/

Il faut prendre la dernière version de NGINX : https://nginx.org/en/download.html, ou directement dans https://nginx.org/download/

# curl -fLRO "http://nginx.org/download/nginx-1.21.5.tar.gz

Méthode rapide (et qui fonctionne tout le temps) :

Ici on met dans la variable latest_nginx la dernière version d’NGINX téléchargée à l’aide de curl, le tout est renvoyé dans la commande egrep qui se charge de récupérer la liste de toutes les versions disponible, le résultat est ensuite renvoyé dans la commande head qui se charge de récupérer le 1er résultat (le nom de la version la plus récente)
On fait ensuite un simple curl avec l’adresse du répertoire de téléchargement et la variable ${latest_nginx} contenant la dernière version que l’on désarchive au passage avec le même nom

# latest_nginx=$(curl -L http://nginx.org/en/download.html | egrep -o "nginx\-[0-9.]+\.tar[.a-z]*" | head -n 1)
# curl -fLRO "http://nginx.org/download/${latest_nginx}" && tar -xaf "${latest_nginx}"

Il faut ensuite prendre la dernière version d’OpenSSL : https://www.openssl.org/source/

# latest_openssl=$(curl -L https://www.openssl.org/source | egrep -o "openssl\-[0-9.]+\.tar[.a-z]*" | head -n 1)
# curl -fLRO "https://www.openssl.org/source/${latest_openssl}" && tar -xaf "${latest_openssl}"

Suppression des archives (**Attention : vérifiez que vous n’en avez pas d’autres que vous souhaiteriez conserver)

# rm /usr/src/*.tar.gz

Configuration

Dans le dossier de NGINX, ici on utilise le contenue de la variable ${latest_nginx} en éliminant se qui se trouve après le point (inclu)

# cd "${latest_nginx//.tar*}"

On lance la configuration à adapter selon vos besoins

# ./configure --http-client-body-temp-path=/usr/local/etc/nginx/body --http-fastcgi-temp-path=/usr/local/etc/nginx/fastcgi --http-proxy-temp-path=/usr/local/etc/nginx/proxy --http-scgi-temp-path=/usr/local/etc/nginx/scgi --http-uwsgi-temp-path=/usr/local/etc/nginx/uwsgi --user=www-data --group=www-data --prefix=/etc/nginx --sbin-path=/usr/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=/usr/local/etc/nginx.pid --lock-path=/usr/local/etc/nginx.lock --with-pcre-jit --with-http_v2_module --with-debug --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_gzip_static_module --with-http_sub_module --with-http_xslt_module --with-file-aio --with-threads --with-http_ssl_module --with-http_geoip_module --with-openssl=/usr/src/${latest_openssl//.tar*} --with-ld-opt=-lrt

Version plus lisible pour les Humains :

# ./configure \
--http-client-body-temp-path=/usr/local/etc/nginx/body \
--http-fastcgi-temp-path=/usr/local/etc/nginx/fastcgi \
--http-proxy-temp-path=/usr/local/etc/nginx/proxy \
--http-scgi-temp-path=/usr/local/etc/nginx/scgi \
--http-uwsgi-temp-path=/usr/local/etc/nginx/uwsgi \
--user=www-data \
--group=www-data \
--prefix=/etc/nginx \
--sbin-path=/usr/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=/usr/local/etc/nginx.pid \
--lock-path=/usr/local/etc/nginx.lock \
--with-pcre-jit \
--with-http_v2_module \
--with-debug \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_dav_module \
--with-http_gzip_static_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-file-aio \
--with-threads \
--with-http_ssl_module \
--with-http_geoip_module \
--with-openssl=/usr/src/${latest_openssl//.tar*} \
--with-ld-opt=-lrt \

Vous avez ensuite votre résumé de configuration :

Configuration summary
+ using threads
+ using system PCRE library
+ using OpenSSL library: /usr/src/openssl-3.0.1
+ using system zlib library

nginx path prefix: "/etc/nginx"
nginx binary file: "/usr/sbin/nginx"
nginx modules path: "/etc/nginx/modules"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/usr/local/etc/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/usr/local/etc/nginx/body"
nginx http proxy temporary files: "/usr/local/etc/nginx/proxy"
nginx http fastcgi temporary files: "/usr/local/etc/nginx/fastcgi"
nginx http uwsgi temporary files: "/usr/local/etc/nginx/uwsgi"
nginx http scgi temporary files: "/usr/local/etc/nginx/scgi"

Compilation

En lançant simplement :

# make && make install

Et en patientant

Lancer ensuite le service

Documentation

https://www.abyssproject.net/2016/11/compiler-nginx-pourquoi-comment/
https://en.wikipedia.org/wiki/OpenSSL

> Partager <