Comment construire Nginx à partir des sources sur CentOS 7

Nginx (prononcé « engine x« ) est un logiciel de serveur Web open source conçu pour une forte concurrence, qui peut être utilisé commeserveur HTTP/HTTPS, serveur proxyinverse, serveur proxy de messagerie,équilibreur de charge logiciel,terminateur TLS, serveur demise en cache

C’est un logiciel extrêmement modulaire. Même certains éléments apparemment « intégrés » au logiciel, comme GZIP ou SSL, sont en fait construits comme des modules qui peuvent être activés et désactivés pendant la construction.

Il possède desmodules de base(natifs) etModules tiers (externes)créés par la communauté. Actuellement, il existe plus d’une centaine de modules tiers que nous pouvons utiliser.

Écrit en langage C,c’est un logiciel très rapide et léger.

Installer Nginx à partir du code source est relativement « facile » – télécharge la dernière version du code source de Nginx, configure, construit et installe.

Tu devras choisir si tu veux télécharger la version mainlineou stable,maisleur constructionest exactement la même.

Dans ce tutoriel, nous construirons Nginx avec tous les modules disponibles dans la version open source de Nginx et nous utiliserons les modules suivantsmainlinequi se trouve à1.15.7au moment où nous écrivons ces lignes. Mets à jour les numéros de version lorsque des versions plus récentes sont disponibles.

Version stable vs. version mainline

Nginx Open Source est disponible en deux versions :

  • Mainline Comprend les dernières fonctionnalités et corrections de bogues et est toujours à jour. Elle est fiable, mais elle peut inclure certains modules expérimentaux et peut aussi comporter un certain nombre de nouveaux bogues.
  • Stable N’inclut pas toutes les dernières fonctionnalités, mais contient des corrections de bugs critiques qui sont toujours reportées dans la version principale.

Modules de base vs. modules tiers

Nginx possède deux types de modules que tu peux utiliser : lesmodules de baseet lesmodules tiers.

Les modules de base sont construits par les principaux développeurs de Nginx et font partie du logiciel lui-même.

Les modules tiers sont construits par la communauté et tu peux les utiliser pour étendre les fonctionnalités de Nginx. Il existe de nombreux modules tiers utiles, les plus connus d’entre eux sont : PageSpeed, ModSecurity, RTMP, Lua etc…

Modules statiques vs. modules dynamiques

Les modules statiques existent dans Nginx depuis la toute première version. Les modules dynamiques ont été introduits avec Nginx 1.9.11+ en février 2016.

Avec les modules statiques, l’ensemble des modules qui constituent un binaire Nginx est fixé au moment de la compilation par le script./configure. Les modules statiques utilisent la syntaxe--with-foo_bar_moduleou--add-module=PATH.

Pour compiler le module de base (standard) en dynamique, ajoute=dynamic, par exemple--with-http_image_filter_module=dynamic.

Pour compiler un module tiers en dynamique, nous utilisons la syntaxe--add-dynamic-module=/path/to/moduleet nous les chargeons en utilisant la directiveload_moduledans lecontexte global du fichiernginx.conf.

Conditions requises pour construire Nginx à partir des sources

Par rapport à d’autres logiciels UNIX/Linux, Nginx est plutôt léger et n’a pas beaucoup de dépendances de bibliothèques. La configuration de construction par défaut ne dépend que de 3 bibliothèques à installer : OpenSSL/LibreSSL/BoringSSL, Zlib etPCRE.

REMARQUE: Nginx peut également être compilé avecLibreSSLetBoringSSLau lieu des bibliothèques cryptographiquesOpenSSL.

Exigences

  • Un serveur exécutant le système CentOS 7.
  • Un utilisateur non-root avec des privilèges sudo.

Étapes initiales

Vérifie la version de CentOS :

cat /etc/centos-release
# CentOS Linux release 7.6.1810 (Core)

Configure le fuseau horaire :

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

Mets à jour les paquets de ton système d’exploitation CentOS :

sudo yum update -y

Installe les paquets vim, curl, wget et tree :

sudo yum install -y vim curl wget tree

Construis Nginx à partir des sources

Nginx est un programme écrit enCtu devras donc d’abord installer un outil de compilation:

sudo yum groupinstall -y 'Development Tools'

Télécharge la dernière version mainline du code source de Nginx et extrais-le. Le code source de Nginx est distribué sous forme d’archive compressée (gzipped tarball), comme la plupart des logiciels Unix et Linux :

wget https://nginx.org/download/nginx-1.15.7.tar.gz && tar zxvf nginx-1.15.7.tar.gz

Télécharge le code source des dépendances obligatoires de Nginx et extrais-le :

# PCRE version 8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz && tar xzvf pcre-8.42.tar.gz

# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz

# OpenSSL version 1.1.1a
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz && tar xzvf openssl-1.1.1a.tar.gz

Installe les dépendances Nginx facultatives :

sudo yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

Nettoie tous les.tar.gzfichiers.Nous n’en avons plus besoin :

rm -rf *.tar.gz

Entre dans le répertoire source de Nginx :

cd ~/nginx-1.15.7

Pour faire bonne mesure, liste les répertoires et les fichiers qui composent le code source de Nginx avectreeutilitaire :

tree -L 2 .

Copie la page de manuel de Nginx dans/usr/share/man/man8/répertoire :

sudo cp ~/nginx-1.15.7/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Check that Man page for Nginx is working:
man nginx

Nginx manpage

Pour t’aider, tu peux voir la liste complète des options de compilation de Nginx à jour en exécutant :

./configure --help
# To see want core modules can be build as dynamic run:
./configure --help | grep -F =dynamic

Configurer, compiler et installer NGINX :

./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib64/nginx/modules \
            --conf-path=/etc/nginx/nginx.conf \
            --error-log-path=/var/log/nginx/error.log \
            --pid-path=/var/run/nginx.pid \
            --lock-path=/var/run/nginx.lock \
            --user=nginx \
            --group=nginx \
            --build=CentOS \
            --builddir=nginx-1.15.7 \
            --with-select_module \
            --with-poll_module \
            --with-threads \
            --with-file-aio \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module \
            --with-http_addition_module \
            --with-http_xslt_module=dynamic \
            --with-http_image_filter_module=dynamic \
            --with-http_geoip_module=dynamic \
            --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_auth_request_module \
            --with-http_random_index_module \
            --with-http_secure_link_module \
            --with-http_degradation_module \
            --with-http_slice_module \
            --with-http_stub_status_module \
            --with-http_perl_module=dynamic \
            --with-perl_modules_path=/usr/lib64/perl5 \
            --with-perl=/usr/bin/perl \
            --http-log-path=/var/log/nginx/access.log \
            --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 \
            --with-mail=dynamic \
            --with-mail_ssl_module \
            --with-stream=dynamic \
            --with-stream_ssl_module \
            --with-stream_realip_module \
            --with-stream_geoip_module=dynamic \
            --with-stream_ssl_preread_module \
            --with-compat \
            --with-pcre=../pcre-8.42 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1a \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug


make
sudo make install

Après avoir construit Nginx, navigue dans le répertoire home (~) :

cd ~

Symlink/usr/lib64/nginx/modulesvers/etc/nginx/modulesdirectory.etc/nginx/modulesest unendroit standard pour les modules Nginx :

sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules

Imprime la version de Nginx, la version du compilateur et les paramètres du script de configuration :

sudo nginx -V
# nginx version: nginx/1.15.7 (CentOS)
# built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
# built with OpenSSL 1.1.1a  20 Nov 2018
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules
# . . .
# . . .

Crée le groupe et l’utilisateur du système Nginx :

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx

Vérifie la syntaxe de Nginx et les erreurs potentielles :

sudo nginx -t

Crée le fichier d’unité Nginx systemd :

sudo vim /etc/systemd/system/nginx.service

Copie/colle le contenu ci-dessous dans/etc/systemd/system/nginx.servicefichier :

REMARQUE: L’emplacement dufichierPIDet dubinaire Nginxpeut être différent selon la façon dont Nginx a été compilé.

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

Active le démarrage de Nginx au démarrage et lance Nginx immédiatement :

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Vérifie si Nginx démarre automatiquement après un redémarrage :

sudo systemctl is-enabled nginx.service
# enabled

Vérifie si Nginx est en cours d’exécution en exécutant l’une des commandes suivantes :

sudo systemctl status nginx.service
# or
ps aux | grep nginx
# or
curl -I 127.0.0.1

Tu peux aussi ouvrir ton navigateur et naviguer vers ton domaine/adresse IP pour voir la page Nginx par défaut. C’est un indicateur que Nginx est en marche.

Page d'accueil de Nginx

Par défaut, Nginx génère des fichiers de sauvegarde.defaultdans/etc/nginx. Supprime.defaultfichiersde/etc/nginx répertoire :

sudo rm /etc/nginx/*.default

Place la coloration syntaxique de la configuration de Nginx pour l’éditeur Vim dans .~/.vim:

# For regular non-root user
mkdir ~/.vim/
cp -r ~/nginx-1.15.7/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.7/contrib/vim/* /root/.vim/

NOTE: En faisant l’étape ci-dessus, tu obtiendras une belle coloration syntaxique lorsque tu modifieras les fichiers de configuration de Nginx dans l’éditeur Vim.

Coloration syntaxique de Nginx dans Vim

Créeconf.d,snippets,sites-availableetsites-enableddans le/etc/nginxrépertoire :

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

Change les permissions et la propriété du groupe des fichiers journaux de Nginx :

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

Crée une configuration de logrotation pour Nginx.

sudo vim /etc/logrotate.d/nginx

Remplis le fichier avec le texte ci-dessous, puis enregistre et quitte :

/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}

Supprime tous les fichiers téléchargés du répertoire personnel :

cd ~
rm -rf nginx-1.15.7/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/

C’est tout. Maintenant, tu as installé la dernière version de Nginx en la construisant à partir du code source. Elle est compilée de manière statique avec certaines bibliothèques importantes comme OpenSSL. Souvent, la version d’OpenSSL fournie par le système est périmée. En utilisant cette méthode d’installation avec une version plus récente d’OpenSSL, tu peux profiter des nouveaux chiffrements commeCHACHA20_POLY1305et des protocolescomme TLS 1.3 quiest pris en charge dansOpenSSL 1.1.1. De plus, en compilant ton propre binaire, tu peux personnaliser les fonctionnalités de ton Nginx, ce qui est beaucoup plus flexible que d’installer un binaire préconstruit.

Vous aimerez aussi...