GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment construire NGINX à partir de la source sur Ubuntu 18.04 LTS

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.0 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 construits par les développeurs principaux de NGINX et ils 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 Ubuntu 18.04 LTS.
  • Un utilisateur non root avec des privilèges sudo.

Étapes initiales

Vérifier la version d'Ubuntu :

lsb_release -ds 
# Ubuntu 18.04 LTS

Configurez le fuseau horaire :

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

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

sudo apt update && sudo 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-essentialgit et tree forfaits :

sudo apt install -y build-essential git tree

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.0.tar.gz &&tar zxvf nginx-1.15.0.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.0h
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz &&tar xzvf openssl-1.1.0h.tar.gz

Installez les dépendances NGINX facultatives :

sudo add-apt-repository -y ppa:maxmind/ppa
sudo apt update &&sudo apt upgrade -y
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.0

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

arbre -L 2 .

Copiez la page du manuel NGINX dans /usr/share/man/man8/ répertoire :

sudo cp ~/nginx-1.15.0/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls / usr/share/man/man8/ | grep nginx.8.gz
# Vérifiez que la page de manuel pour NGINX fonctionne :
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
# Pour voir si les modules de base peuvent être construits en dynamique, exécutez :
./configure --help | grep -F =dynamique

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=Ubuntu \
            --builddir=nginx-1.15.0 \
            --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_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.26.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.0h \
            - -with-openssl-opt=no-nextprotoneg \
            --with-debug


make
sudo make install

Après avoir construit NGINX, accédez à l'accueil (~ ) 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
# version de nginx :nginx/1.15.0 (Ubuntu)
# construit par gcc 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
# construit avec OpenSSL 1.1.0h 27 mars 2018
# Prise en charge TLS SNI activée
# arguments de configuration :--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 "utilisateur nginx" --group nginx 

Vérifiez la syntaxe NGINX et les erreurs potentielles :

sudo nginx -t
# Enverra cette erreur -> nginx :[emerg] mkdir() "/var/cache/nginx/client_temp" a échoué (2 :aucun fichier ou répertoire de ce type)

# Créez des répertoires de cache NGINX et définissez les autorisations appropriées
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/*

# Revérifiez la syntaxe et les erreurs potentielles.
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 - serveur Web hautes performancesDocumentation=https://nginx.org/en/docs/After=network-online.target remote-fs.target nss-lookup.targetWants=network-online.target [Service]Type=forkingPIDFile=/var/run/nginx.pidExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.confExecStart=/usr/sbin/nginx -c /etc/nginx/nginx. confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPID[Install]WantedBy=multi-user.target

Activez NGINX pour qu'il démarre au démarrage et démarrez 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
# activé

Vérifiez si NGINX est en cours d'exécution en exécutant l'une des commandes suivantes :

sudo systemctl status nginx.service
# ou
ps aux | grep nginx
# ou
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=Petit, mais très puissant et efficace web serverports=80/tcp[Nginx HTTPS]title=Web Server (Nginx, HTTPS)description=Petit, mais très serveur Web puissant et efficaceports=443/tcp[Nginx Full]title=Serveur Web (Nginx, HTTP + HTTPS)description=Serveur Web petit, mais très puissant et efficaceports=80,443/tcp

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

sudo ufw app list

# Applications disponibles :
 # Nginx Full
 # Nginx HTTP
 # Nginx HTTPS
 # OpenSSH

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 :

# Pour les utilisateurs réguliers non root mkdir ~/.vim/cp -r ~/nginx-1.15.0/contrib/vim/* ~/.vim/# Pour les utilisateurs rootudo mkdir /root/.vim/sudo cp - r ~/nginx-1.15.0/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 ] ; puis tuez -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.0/ openssl-1.1.0h/ 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 qui sera 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.


Ubuntu
  1. Comment mettre à niveau vers Ubuntu 18.10 à partir d'Ubuntu 18.04 LTS

  2. Comment compiler Brotli à partir de la source sur Ubuntu 18.04 LTS

  3. Comment mettre à niveau d'Ubuntu 20.04 vers Ubuntu 22.04 LTS (guide étape par étape)

  4. Comment mettre à niveau vers Ubuntu 22.04 LTS à partir d'Ubuntu 20.04 LTS et 21.10

  5. Comment mettre à jour Ubuntu 20.04/21.10 vers 22.04 LTS

Comment installer la version principale de Nginx sur Ubuntu 16.04 LTS

Comment installer l'agent Nginx Amplify sur Ubuntu 16.04 LTS

Comment installer Nginx sur Ubuntu 18.04 LTS

Comment installer LEMP sur Ubuntu 18.04 LTS

Comment installer LEMP sur Ubuntu 20.04 LTS

Comment installer phpMyAdmin avec Nginx sur Ubuntu 20.04 LTS