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/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 sous forme de modules qui peuvent être activés et désactivés pendant le temps de construction.
Il a noyau (natif ) modules 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 /BoringSSL , Zlib et PCRE .
- Exigences obligatoires :
- Collection de compilateurs GNU (GCC )
- Version de la bibliothèque OpenSSL entre 1.0.2 - 1.1.1 ou bibliothèque LibreSSL ou bibliothèque BoringSSL
- Version de la bibliothèque Zlib entre 1.1.3 - 1.2.11
- Version de la bibliothèque PCRE entre 4.4 - 8.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 wget
, curl
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.d
, snippets
, sites-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.