NGINX peut être utilisé comme serveur HTTP / HTTPS, serveur proxy inverse, serveur proxy de messagerie, équilibreur de charge, terminateur TLS ou serveur de mise en cache. Il est assez modulaire de par sa conception. Il a des modules natifs et des modules tiers créés par la communauté. Écrit dans le langage de programmation C, c'est un logiciel très rapide et léger.
REMARQUE : NGINX a deux flux de versions qui s'exécutent en parallèle - stable et mainline . Les deux versions peuvent être utilisées sur un serveur de production. Il est recommandé d'utiliser la version principale en production.
L'installation de NGINX à partir du code source est relativement "facile" - téléchargez la dernière version du code source NGINX, configurez, compilez et installez-la.
Dans ce tutoriel, j'utiliserai la version principale , qui est 1.13.1 au moment de la rédaction. Mettez à jour les numéros de version en conséquence lorsque de nouvelles versions sont disponibles.
Exigences pour construire NGINX à partir de la source
Exigences obligatoires:
- Version de la bibliothèque OpenSSL entre 1.0.2 et 1.1.0
- Version de la bibliothèque Zlib entre 1.1.3 et 1.2.11
- Version de bibliothèque PCRE entre 4.4 - 8.40
- Compilateur GCC
Exigences facultatives:
Avant que tu commences
-
Créez un utilisateur régulier avec sudo
accès .
-
Passez au nouvel utilisateur:
su - <username>
-
Système de mise à jour:
sudo apt update && sudo apt upgrade -y
Construire NGINX à partir de la source
-
NGINX est un programme écrit en C, nous devons donc installer le compilateur C (GCC).
sudo apt install build-essential -y
-
Téléchargez la dernière version du code source NGINX et extrayez-la:
wget https://nginx.org/download/nginx-1.13.1.tar.gz && tar zxvf nginx-1.13.1.tar.gz
-
Téléchargez le code source des dépendances NGINX et extrayez-les:
NGINX dépend de 3 bibliothèques: PCRE , zlib et OpenSSL :
# PCRE version 4.4 - 8.40
wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz && tar xzvf pcre-8.40.tar.gz
# zlib version 1.1.3 - 1.2.11
wget http://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz
# OpenSSL version 1.0.2 - 1.1.0
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz && tar xzvf openssl-1.1.0f.tar.gz
-
Supprimez tous les .tar.gz
fichiers. Nous n'en avons plus besoin:
rm -rf *.tar.gz
-
Accédez au répertoire source de NGINX:
cd ~/nginx-1.13.1
-
Pour obtenir de l'aide, vous pouvez répertorier les commutateurs de configuration disponibles en exécutant:
./configure --help
-
Configurez, compilez et installez NGINX:
./configure --prefix=/usr/share/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 \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=www-data \
--group=www-data \
--build=Ubuntu \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--with-openssl=../openssl-1.1.0f \
--with-openssl-opt=enable-ec_nistp_64_gcc_128 \
--with-openssl-opt=no-nextprotoneg \
--with-openssl-opt=no-weak-ssl-ciphers \
--with-openssl-opt=no-ssl3 \
--with-pcre=../pcre-8.40 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_secure_link_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-debug \
--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'
make
sudo make install
-
Supprimez tous les fichiers téléchargés du répertoire principal, dans ce cas /home/username
:
cd ~
rm -r nginx-1.13.1/ openssl-1.1.0f/ pcre-8.40/ zlib-1.2.11/
-
Vérifiez la version de NGINX et les options de compilation:
sudo nginx -v && sudo nginx -V
# nginx version: nginx/1.13.0 (Ubuntu)
# built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
# built with OpenSSL 1.1.0f 25 May 2017
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx . . .
# . . .
# . . .
-
Vérifiez la syntaxe et les erreurs potentielles:
sudo nginx -t
# Will throw this error nginx: [emerg] mkdir() "/var/lib/nginx/body" failed (2: No such file or directory)
# Just create directory
mkdir -p /var/lib/nginx && sudo nginx -t
-
Créez le fichier d'unité systemd pour NGINX:
sudo vim /etc/systemd/system/nginx.service
-
Copiez / collez le contenu suivant:
REMARQUE : l'emplacement du fichier PID et du binaire NGINX peut être différent selon la façon dont NGINX a été compilé.
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
[Install]
WantedBy=multi-user.target
-
Démarrez et activez le service NGINX:
sudo systemctl start nginx.service && sudo systemctl enable nginx.service
-
Vérifiez si NGINX démarrera après un redémarrage:
sudo systemctl is-enabled nginx.service
# enabled
-
Vérifiez si NGINX est en cours d'exécution:
sudo systemctl status nginx.service
ps aux | grep nginx
curl -I 127.0.0.1
-
Redémarrez votre VPS Ubuntu pour vérifier que NGINX démarre automatiquement:
sudo shutdown -r now
-
Créez le profil d'application UFW NGINX:
sudo vim /etc/ufw/applications.d/nginx
-
Copiez / collez le contenu suivant:
[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
-
Maintenant, 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
# OpenSSH
Conclusion
C'est tout. Vous avez maintenant installé la dernière version de NGINX. Il est compilé statiquement par rapport à certaines bibliothèques importantes comme OpenSSL. Souvent, la version du système OpenSSL est obsolète. En utilisant cette méthode d'installation avec une version plus récente d'OpenSSL, vous pouvez profiter de nouveaux chiffrements comme CHACHA20_POLY1305
et des protocoles comme TLS 1.3 qui seront disponibles dans OpenSSL 1.1.1
(qui n'a pas été publié).