GNU/Linux >> Tutoriels Linux >  >> Debian

Comment construire Nginx à partir de la source sur Debian 9

Nginx (prononcé "moteur x" ) est un logiciel de serveur Web open source conçu dans un souci de haute simultanéité, qui peut être utilisé comme serveur HTTP/HTTPSserveur proxy inverseserveur proxy de messagerieéquilibreur de charge logicielleTerminateur TLSserveur 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 sous forme de modules qui peuvent être activés et désactivés pendant le temps de construction.

Il a noyau (natifmodules et modules tiers (externes) créé par la communauté. À l'heure actuelle, nous pouvons utiliser plus d'une centaine de modules tiers.

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

L'installation de Nginx à partir du code source est relativement "simple" :téléchargez la dernière version du code source de Nginx, configurez-la, créez-la et installez-la.

Vous devrez choisir de télécharger la ligne principale ou stable version, mais les construire est exactement le même.

Dans ce tutoriel, nous allons construire Nginx avec tous les modules disponibles dans la version open source de Nginx et nous utiliserons mainline  version qui est 1.15.8 au moment d'écrire ces lignes. Mettez à jour les numéros de version lorsque de nouvelles versions sont disponibles.

Version stable contre version principale

Nginx Open Source est disponible en deux versions :

  • Ligne principale - Inclut les dernières fonctionnalités et corrections de bogues et est toujours à jour. Il est fiable, mais il peut inclure des modules expérimentaux, et il peut aussi avoir un certain nombre de nouveaux bogues.
  • Stable - N'inclut pas toutes les dernières fonctionnalités, mais contient des corrections de bogues critiques qui sont toujours rétroportées vers la version principale.

Modules de base contre modules tiers

Nginx propose deux types de modules que vous pouvez utiliser : modules principaux et modules tiers .

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

Les modules tiers sont créés par la communauté et vous pouvez les utiliser pour étendre les fonctionnalités de Nginx. Il existe de nombreux modules tiers utiles, dont les plus connus sont :PageSpeed, ModSecurity, RTMP, Lua etc...

Modules statiques contre 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 ./configure scénario. Les modules statiques utilisent --with-foo_bar_module ou --add-module=PATH syntaxe.

Pour compiler le module principal (standard) en tant que module dynamique, nous ajoutons =dynamic , par exemple --with-http_image_filter_module=dynamic .

Pour compiler un module tiers en tant que module dynamique, nous utilisons --add-dynamic-module=/path/to/module syntaxe, puis nous les chargeons en utilisant load_module directive dans le contexte global de nginx.conf fichier.

Exigences pour construire 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 compilation par défaut dépend de seulement 3 bibliothèques à installer : OpenSSL /LibreSSL /BoringSSLZlib et PCRE .

  • Exigences obligatoires :
    • Collection de compilateurs GNU (GCC )
    • Version de la bibliothèque OpenSSL entre 1.0.21.1.1 ou bibliothèque LibreSSL ou bibliothèque BoringSSL 
    • Version de la bibliothèque Zlib entre 1.1.31.2.11
    • Version de la bibliothèque PCRE entre 4.48.42
  • Exigences facultatives :
    • Perl
    • LibGD
    • Bibliothèque C Legacy MaxMind GeoIP
    • libxml2
    • libxslt

REMARQUE  :Nginx peut également être compilé avec LibreSSL et BoringSSL bibliothèques de chiffrement au lieu de OpenSSL .

Exigences

  • Un serveur exécutant Debian 9 (extensible).
  • Un utilisateur non root avec des privilèges sudo.

Étapes initiales

Vérifiez la version de Debian :

lsb_release -ds 
# Debian GNU/Linux 9.6 (stretch)

Installer wgetcurl et sudo colis.

apt install -y wget curl sudo

Configurez le fuseau horaire :

sudo dpkg-reconfigure tzdata

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

apt update && apt upgrade -y

Construire Nginx à partir de la source

Nginx est un programme écrit en C , vous devrez donc d'abord installer un outil de compilation. Installez build-essential package et autres packages requis :

sudo apt install -y build-essential git tree software-properties-common dirmngr apt-transport-https ufw

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ée), comme la plupart des logiciels Unix et Linux :

wget https://nginx.org/download/nginx-1.15.8.tar.gz && tar zxvf nginx-1.15.8.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 apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

Nettoyer tous les .tar.gz des dossiers. Nous n'en avons plus besoin :

rm -rf *.tar.gz

Entrez le répertoire source Nginx :

cd ~/nginx-1.15.8

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

tree -L 2 .

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

sudo cp ~/nginx-1.15.8/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 temps 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

Configurez, compilez et installez Nginx :

./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib/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=Debian \
            --builddir=nginx-1.15.8 \
            --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/share/perl/5.24.1 \
            --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 à la maison (~ ) répertoire :

cd ~

Lien symbolique /usr/lib/nginx/modules vers /etc/nginx/modules annuaire. etc/nginx/modules est un emplacement standard pour les modules Nginx :

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

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

sudo nginx -V
# nginx version: nginx/1.15.8 (Debian)
# built by gcc 6.3.0 (Debian 6.3.0-18+deb9u1)
# 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/lib/nginx/modules
# . . .
# . . .

Créez un groupe système et un utilisateur Nginx :

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx

Vérifiez la syntaxe Nginx et les erreurs potentielles :

sudo nginx -t
# Will throw this error -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)

# Create nginx cache directories and set proper permissions
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*

# Re-check syntax and potential errors.
sudo nginx -t

Créez le fichier d'unité systemd Nginx :

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

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

[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.

Créer un pare-feu simple (UFW ) Profil d'application Nginx :

sudo vim /etc/ufw/applications.d/nginx

Copiez/collez le contenu ci-dessous dans /etc/ufw/applications.d/nginx fichier :

[nginx HTTP]
title=Web Server (nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[nginx HTTPS]
title=Web Server (nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[nginx Full]
title=Web Server (nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp

Vérifiez que les profils d'application UFW sont créés et reconnus :

sudo ufw app list

# Available applications:
 # nginx Full
 # nginx HTTP
 # nginx HTTPS

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

sudo rm /etc/nginx/*.default

Placer 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.8/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.8/contrib/vim/* /root/.vim/

REMARQUE  :En effectuant l'étape ci-dessus, vous obtiendrez une belle coloration syntaxique lors de la modification des fichiers de configuration Nginx dans l'éditeur Vim.

Créer conf.dsnippetssites-available et sites-enabled répertoires dans /etc/nginx répertoire :

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 une configuration de rotation de log 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 personnel :

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

C'est ça. Maintenant, vous avez installé la dernière version de Nginx en la construisant à partir du code source. Il est compilé statiquement avec 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 tels que CHACHA20_POLY1305 et des protocoles comme TLS 1.3 disponible 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é-construit.


Debian
  1. Comment recompiler le serveur Web nginx sur Debian Linux

  2. Comment passer de Debian 10 à Debian 11

  3. Comment construire nginx avec le module Google PageSpeed ​​sur Debian 8 (Jessie)

  4. Comment mettre à niveau vers Debian 11 à partir de Debian 10

  5. Comment compiler à partir des sources et installer Nginx dans un VPS Debian 7 (Wheezy)

Comment mettre à jour Debian 10 vers Debian 11

Comment construire des paquets Debian à partir de la source

Comment désinstaller des programmes de Debian 10

Comment rediriger d'un domaine à un autre dans Nginx et Debian 11

Comment compiler le noyau Linux à partir de la source pour créer un noyau personnalisé

Comment installer Nginx sur Debian 10