Vous êtes ici : » Accueil» Nginx » Comment compiler Nginx à partir de la source sur CentOS 7

Comment compiler Nginx à partir de la source sur CentOS 7

(Dernière mise à jour le: 3 septembre 2021)

Nginx (prononcé « engine x »)est un logiciel de serveur Web open source conçu avec une concurrence élevée à l’esprit, qui peut être utilisé comme serveur HTTP/HTTPS, serveur proxy inverse, serveur proxy de messagerie, équilibreur de charge logicielle, terminateur TLS, serveur de mise en cache.

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

Il a des modules de base (natifs)et des modules tiers (externes) créés par la communauté. À l’heure actuelle, 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.

L’installation de Nginx à partir du code source est relativement « facile » – téléchargez la dernière version du code source Nginx, configurez-la, construisez-la et installez-la.

Vous devrez choisir de télécharger la version principale ou stable, mais leur construction est exactement la même chose.

Dans ce tutoriel, nous allons construire Nginx avec tous les modules disponibles dans la version open source de Nginx et nous utiliserons la version principale qui est à 1.15.7 au moment de la rédaction de cet article. Mettez à jour les numéros de version lorsque des versions plus récentes deviennent disponibles.

Version stable et version principale

Nginx Open Source est disponible en deux versions:

  • Mainline – Comprend les dernières fonctionnalités et corrections de bugs et est toujours à jour. Il est fiable, mais il peut inclure des modules expérimentaux, et il peut également avoir un certain nombre de nouveaux bogues.
  • Stable – N’inclut pas toutes les dernières fonctionnalités, mais a des corrections de bogues critiques qui sont toujours rétroportées vers la version principale.

Modules principaux et modules tiers

Nginx a deux types de modules que vous pouvez utiliser: modules de base et modules tiers.

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

Les modules tiers sont construits par la communauté et vous pouvez les utiliser pour étendre les fonctionnalités de Nginx. Il y a beaucoup de modules tiers utiles, les plus célèbres d’entre eux sont: PageSpeed, ModSecurity, RTMP, Lua 

Modules statiques et modules dynamiques

Les modules statiques existent dans Nginx dès la 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 corrigé au moment de la compilation par le script. Utilisation ou syntaxe des modules statiques. ./configure–with-foo_bar_module–add-module=PATH

Pour compiler le module de base (standard) comme dynamique, nous ajoutons , par exemple . =dynamic–with-http_image_filter_module=dynamic

Pour compiler un module tiers en tant que dynamique, nous utilisons la syntaxe, puis nous les chargeons à l’aide de directive dans le contexte global du fichier. –add-dynamic-module=/path/to/moduleload_modulenginx.conf

Configuration requise pour la création de Nginx à partir de la source

En comparaison avec d’autres logiciels UNIX/Linux, Nginx est assez léger et n’a pas beaucoup de dépendances de bibliothèque. La configuration de build par défaut ne dépend que de 3 bibliothèques à installer : OpenSSL/LibreSSL/BoringSSL, Zlib et PCRE.

REMARQUE:Nginx peut également être compilé avec les bibliothèques cryptographiques LibreSSL et BoringSSL au lieu d’OpenSSL .

Exigences

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

Étapes initiales

Vérifiez la version CentOS:

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

Configurez le fuseau horaire :

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

Mettez à jour les packages de votre système d’exploitation CentOS:

sudo yum update -y

Installez les paquets vim, curl, wget et tree :

sudo yum install -y vim curl wget tree

Construire Nginx à partir de la source

Nginx est un programme écrit en C, vous devrez donc d’abord installer un compilateur d’outils:

sudo yum groupinstall -y 'Development Tools'

Téléchargez la dernière version principale du code source nginx et extrayez-la. Le code source nginx est distribué sous forme d’archive compressée (tarball gzippé), 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échargez le code source des dépendances Nginx obligatoires et extrayez-les:

# 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

Installez 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

Nettoyez tous les fichiers. Nous n’en avons plus besoin : .tar.gz

rm -rf *.tar.gz

Entrez dans le répertoire source Nginx:

cd ~/nginx-1.15.7

Pour une bonne mesure liste répertoires et fichiers qui composent le code source Nginx avec utilitaire: tree

tree -L 2 .

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

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

Pour obtenir de l’aide, vous pouvez voir la liste complète des options de compilation 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, accédez aurépertoire /home () :~

cd ~

Lien symbolique /usr/lib64/nginx/modules au répertoire /etc/nginx/modules/etc/nginx/modules est un endroit standard pour les modules Nginx:

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

Imprimez la version Nginx, la version du compilateur et configurez les paramètres de script:

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éez un groupe système nginx et l’utilisateur:

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

Vérifiez la syntaxe Nginx et les erreurs potentielles:

sudo nginx -t

Créer un fichier d’unité nginx systemd:

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

Copiez/collez le contenu ci-dessous dans un fichier :/etc/systemd/system/nginx.service

REMARQUE: L’emplacement du fichier PID et le binaire Nginx peut ê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

Activez Nginx pour démarrer au démarrage et démarrer Nginx immédiatement:

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

Vérifiez si Nginx se lancera automatiquement après un redémarrage:

sudo systemctl is-enabled nginx.service
# enabled

Vérifiez 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

Vous pouvez également ouvrir votre navigateur et accéder à votre domaine/adresse IP pour voir la page Nginx par défaut. C’est un indicateur que Nginx est opérationnel.

nginx-page Comment compiler Nginx à partir de la source sur CentOS 7

Nginx par défaut, génère des fichiers .default de sauvegarde dans/etc/nginx. Supprimer les fichiers .default du répertoire/etc/nginx:

sudo rm/etc/nginx/*.default

Placez la coloration syntaxique de la configuration 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/

Créez des répertoires dans le répertoire : conf.dsnippetssites-availablesites-enabled/etc/nginx

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

Modifier les autorisations et la propriété du groupe des fichiers journaux Nginx:

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

Créez la configuration logrotation pour Nginx.

sudo vim/etc/logrotate.d/nginx

Remplissez le fichier avec le texte ci-dessous, puis enregistrez et quittez:

/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
}

Supprimez tous les fichiers téléchargés du répertoire de base:

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

C’est tout. Maintenant, vous avez la dernière version de Nginx installée en la construisant à partir du code source. Il est compilé statiquement par rapport à certaines bibliothèques importantes comme OpenSSL. Souvent, la version d’OpenSSL fournie par le système est obsolète. En utilisant cette méthode d’installation avec une version plus récente d’OpenSSL, vous pouvez tirer parti de nouveaux chiffrements et protocoles comme TLS 1.3 qui est pris en charge dans OpenSSL 1.1.1 De plus, en compilant votre propre binaire, vous pouvez personnaliser les fonctionnalités que votre Nginx fournira, ce qui est beaucoup plus flexible que l’installation d’un binaire prédéfini. CHACHA20_POLY1305

SeeSoon

Technicien supérieur en Informatique, Amateur en électronique Administrateur du site milbako, + 30 ans d'expériences. Je ne suis pas un spécialiste, contrairement à ce qu'on essaie parfois de me faire croire. Je ne suis d'ailleurs spécialiste en rien, ce qui est en accord avec ce que j'essaye de me faire croire. Je suis simplement bricoleur et me suis fait quelques idées au fil des ans.

Voir tous les articles de SeeSoon →

Laisser un commentaire

Translate »