Comment compiler Nginx à partir de la source sur Debian 10

introduction

Nginx est un logiciel de serveur Web open source conçu avec un haut niveau de simultanéité à 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 et plus encore!

Il s'agit d'un logiciel très modulaire. Même certaines des parties apparemment «intégrées» du logiciel, telles que GZIP ou SSL, sont en fait créées 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 C, c'est un logiciel 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, compilez et installez-la.

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

Dans ce guide, nous allons compiler une version principale de Nginx sur Debian 10 (buster). Nous utiliserons tous les modules disponibles dans la version open-source de Nginx.

Pourquoi compiler et installer Nginx à partir des sources

Vous vous demandez probablement pourquoi compiler Nginx à partir d'une source alors que vous pouvez utiliser des packages préparés. Voici quelques raisons pour lesquelles vous voudrez peut-être compiler vous-même un logiciel spécifique:

  • Pour contrôler les options de configuration.
  • Pour installer le logiciel où vous le souhaitez. Vous pouvez même installer plusieurs versions différentes du même logiciel.
  • Pour contrôler la version que vous installez. Les distributions ne restent pas toujours à jour avec les dernières versions de tous les packages, en particulier les modules complémentaires des packages logiciels.
  • Pour mieux comprendre le fonctionnement du logiciel.

Version stable vs 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 certains modules expérimentaux, et il peut également contenir 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 vs modules tiers

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

Les développeurs principaux de Nginx construisent des modules de base et ils font partie du logiciel lui-même.

La communauté crée des modules tiers et vous pouvez les utiliser pour étendre les fonctionnalités. Il existe de nombreux modules tiers utiles.

Modules statiques vs modules dynamiques

Des modules statiques existent dans Nginx depuis la toute première version. Des modules dynamiques ont été introduits avec Nginx 1.9.11+ en février 2016.

Avec les modules statiques, un ensemble de modules qui constituent un binaire Nginx est fixé au moment de la compilation par le ./configurescript. Utilisation de modules statiques --with-foo_bar_moduleou --add-module=PATHsyntaxe.

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

Pour compiler un module tiers comme dynamique, nous utilisons la --add-dynamic-module=/path/to/modulesyntaxe, puis nous les chargeons en utilisant la load_moduledirective dans le contexte global du nginx.conffichier.

Exigences pour construire Nginx à partir de la source

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

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

Avant que tu commences

Vérifiez la version Debian.

lsb_release -ds
# Debian GNU/Linux 10 (buster)

Créez un utilisateur régulier avec sudoaccès.

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe

REMARQUE : remplacez johndoepar votre nom d'utilisateur .

Passez à un nouvel utilisateur.

su - johndoe

Configurez le fuseau horaire.

sudo dpkg-reconfigure tzdata

Mettez à jour le logiciel de votre système d'exploitation.

sudo apt update && sudo apt upgrade -y

Installez les packages nécessaires.

sudo apt install -y software-properties-common ufw

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, gitet tree.

sudo apt install -y build-essential git tree

Téléchargez la dernière version principale du code source Nginx et décompressez l'archive du code source. Le code source de Nginx est distribué sous forme d'archive compressée, comme la plupart des logiciels Unix et Linux.

wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz

Téléchargez le code source des dépendances Nginx obligatoires et extrayez-le.

# PCRE version 8.43
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.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.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.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

Nettoyez tous les .tar.gzfichiers. Nous n'en avons plus besoin.

rm -rf *.tar.gz

Entrez dans le répertoire source de Nginx.

cd ~/nginx-1.17.2

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

tree -L 2 .

Copiez la page de manuel dans /usr/share/man/man8/.

sudo cp ~/nginx-1.17.2/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 une liste complète des options de compilation Nginx à jour en exécutant ce qui suit.

./configure --help
# To see want core modules can be built 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.17.2 \
            --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.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.43 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1c \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug

make
sudo make install

Après la compilation, accédez à votre ~répertoire home ( ).

cd ~

Lien symbolique /usr/lib/nginx/modulesvers /etc/nginx/modules. Il s'agit d'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 de script.

sudo nginx -V

# nginx version: nginx/1.17.2 (Debian)
# built by gcc 8.3.0 (Debian 8.3.0-6)
# built with OpenSSL 1.1.1c  28 May 2019
# 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
# Check that user and group are created
sudo tail -n 1 /etc/passwd /etc/group /etc/shadow

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 un fichier d'unité systemd Nginx.

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

Remplissez le /etc/systemd/system/nginx.servicefichier avec le contenu suivant.

[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émarrez Nginx immédiatement.

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

Vérifiez si Nginx démarre automatiquement après un redémarrage.

sudo systemctl is-enabled nginx.service
# enabled

Vérifiez le statut.

sudo systemctl status nginx.service

REMARQUE : vous pouvez vérifier que Nginx fonctionne en accédant au domaine ou à l'adresse IP de votre site dans un navigateur Web. Vous verrez la page d'accueil de Nginx. C'est un indicateur que Nginx est opérationnel sur votre VPS.

Créez un profil d'application UFW Nginx.

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

Copiez / collez le contenu suivant dans le /etc/ufw/applications.d/nginxfichier.

[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

Validez que les profils d'application UFW sont créés et reconnus.

sudo ufw app list

# Available applications:
  # Nginx Full
  # Nginx HTTP
  # Nginx HTTPS
  # OpenSSH

Nginx, par défaut, génère des .defaultfichiers de sauvegarde dans /etc/nginx. Supprimez les .defaultfichiers du /etc/nginxrépertoire.

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.17.2/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.17.2/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-availableet sites-enabledrépertoires /etc/nginx.

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

Modifiez les autorisations et la propriété de 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 des journaux pour Nginx.

sudo vim /etc/logrotate.d/nginx

Remplissez le fichier avec le texte suivant, 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.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/

Résumé

C'est tout. Maintenant, vous avez installé la dernière version de Nginx. 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 des chiffrements modernes comme CHACHA20_POLY1305et des protocoles comme TLS 1.3 qui sont disponibles dans OpenSSL 1.1.1. De plus, en compilant votre propre binaire, vous êtes en mesure de personnaliser les fonctionnalités de votre Nginx, ce qui est beaucoup plus flexible que d'installer un binaire pré-construit.



Leave a Comment

Configurez votre propre réseau privé avec OpenVPN

Configurez votre propre réseau privé avec OpenVPN

Vultr vous offre une connectivité réseau privée impressionnante pour les serveurs fonctionnant au même endroit. Mais parfois, vous voulez deux serveurs dans des pays différents

Configurer un Chroot sur Debian

Configurer un Chroot sur Debian

Cet article vous apprendra comment configurer une prison chroot sur Debian. Je suppose que vous utilisez Debian 7.x. Si vous utilisez Debian 6 ou 8, cela peut fonctionner, bu

Comment installer PiVPN sur Debian

Comment installer PiVPN sur Debian

Introduction Un moyen facile de configurer un serveur VPN sur Debian est avec PiVPN. PiVPN est un installateur et un wrapper pour OpenVPN. Il crée des commandes simples pour vous t

Comment installer Kanboard sur Debian 9

Comment installer Kanboard sur Debian 9

Vous utilisez un système différent? Introduction Kanboard est un logiciel de gestion de projet gratuit et open source conçu pour faciliter et visualiser

Comment installer Neos CMS sur Debian 9

Comment installer Neos CMS sur Debian 9

Vous utilisez un système différent? Neos est une plate-forme dapplication de contenu avec un CMS et un cadre dapplication en son cœur. Ce guide vous montrera comment installer

Configurer Cacti sur Debian Jessie

Configurer Cacti sur Debian Jessie

Introduction Cacti est un outil de surveillance et de création de graphiques open source entièrement basé sur les données RRD. Grâce à Cacti, vous pouvez surveiller presque nimporte quel type de périphérique

Configurer Teamspeak 3 sur Debian Wheezy

Configurer Teamspeak 3 sur Debian Wheezy

Cet article vous montrera comment exécuter un serveur Teamspeak 3 sous Debian Wheezy. Avant de commencer, vous devez préparer votre VPS. je

Comment installer Java 8 et DCEVM sur Debian 8 (Jessie)

Comment installer Java 8 et DCEVM sur Debian 8 (Jessie)

Java est un langage de programmation / machine virtuelle indépendant de la plate-forme. Dans ce tutoriel, nous allons installer limplémentation OpenJDK de Java 8 sur une Debian

Utiliser les vues MySQL sur Debian 7

Utiliser les vues MySQL sur Debian 7

Introduction MySQL a une grande fonctionnalité connue sous le nom de vues. Les vues sont des requêtes stockées. Considérez-les comme un alias pour une requête autrement longue. Dans ce guide,

Comment installer ModSecurity pour Nginx sur CentOS 7, Debian 8 et Ubuntu 16.04

Comment installer ModSecurity pour Nginx sur CentOS 7, Debian 8 et Ubuntu 16.04

ModSecurity est un module de pare-feu dapplications Web open source (WAF) qui est idéal pour protéger Apache, Nginx et IIS contre diverses cyberattaques qui ciblent

Comment installer Matomo Analytics sur Debian 9

Comment installer Matomo Analytics sur Debian 9

Vous utilisez un système différent? Matomo (anciennement Piwik) est une plate-forme danalyse open source, une alternative ouverte à Google Analytics. La source Matomo est hébergée o

Installer Hiawatha Web Server avec PHP-FPM et MySQL sur Debian

Installer Hiawatha Web Server avec PHP-FPM et MySQL sur Debian

Hiawatha est un serveur Web qui a à lesprit la simplicité, la facilité dutilisation et la sécurité. Cest la solution parfaite pour les petits serveurs, le matériel plus ancien ou lembedde

Surveiller létat du serveur Debian avec Munin

Surveiller létat du serveur Debian avec Munin

Munin est un outil de surveillance pour étudier les processus et les ressources de votre machine et présente les informations sous forme de graphiques via une interface Web. Utilisez le suivi

Comment installer le forum NodeBB sur Debian 9

Comment installer le forum NodeBB sur Debian 9

Vous utilisez un système différent? NodeBB est un forum basé sur Node.js. Il utilise des sockets Web pour des interactions instantanées et des notifications en temps réel. Code source NodeBB i

Installer Plesk sur Debian 8 (Jessie)

Installer Plesk sur Debian 8 (Jessie)

Vous utilisez un système différent? Plesk est un panneau de contrôle dhôte Web propriétaire qui permet aux utilisateurs dadministrer leurs sites Web personnels et / ou clients, bases de données

Comment installer Koel sur Debian 9

Comment installer Koel sur Debian 9

Vous utilisez un système différent? Koel est une simple application de streaming audio personnel basée sur le Web écrite en Vue côté client et Laravel côté serveur. Koe

Session collante avec Docker Swarm (CE) sur Debian 9

Session collante avec Docker Swarm (CE) sur Debian 9

Vous utilisez un système différent? Introduction Docker Swarm transforme vos serveurs individuels en un cluster dordinateurs; faciliter la mise à léchelle, la haute disponibilité et

Comment installer Paste 2.1 sur un VPS Debian 9 LAMP

Comment installer Paste 2.1 sur un VPS Debian 9 LAMP

Vous utilisez un système différent? Paste 2.1 est une application pastebin simple et flexible, gratuite et open source pour stocker du code, du texte et plus encore. Cétait initial

Forcer Apt-Get à IPv4 ou IPv6 sur Ubuntu ou Debian

Forcer Apt-Get à IPv4 ou IPv6 sur Ubuntu ou Debian

Ici, sur Vultr, nous avons la possibilité dactiver IPv6 sur tous les VPS déployables. Mais avec cela, certains programmes et commandes peuvent préférer lun ou lautre avec

Comment configurer Snort sur Debian

Comment configurer Snort sur Debian

Snort est un système gratuit de détection dintrusion réseau (IDS). En termes moins officiels, il vous permet de surveiller votre réseau pour détecter toute activité suspecte en temps réel

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

LIA peut-elle lutter contre un nombre croissant dattaques de ransomware

Les attaques de ransomware sont en augmentation, mais l'IA peut-elle aider à lutter contre le dernier virus informatique ? L'IA est-elle la réponse ? Lisez ici, sachez que l'IA est un boone ou un fléau

ReactOS : est-ce lavenir de Windows ?

ReactOS : est-ce lavenir de Windows ?

ReactOS, un système d'exploitation open source et gratuit est ici avec la dernière version. Cela peut-il suffire aux besoins des utilisateurs de Windows modernes et faire tomber Microsoft ? Découvrons-en plus sur cet ancien style, mais une expérience de système d'exploitation plus récente.

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Restez connecté via lapplication de bureau WhatsApp 24 * 7

Whatsapp a finalement lancé l'application de bureau pour les utilisateurs Mac et Windows. Vous pouvez désormais accéder facilement à Whatsapp depuis Windows ou Mac. Disponible pour Windows 8+ et Mac OS 10.9+

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Comment lIA peut-elle faire passer lautomatisation des processus au niveau supérieur ?

Lisez ceci pour savoir comment l'intelligence artificielle devient populaire parmi les petites entreprises et comment elle augmente les probabilités de les faire grandir et de donner à leurs concurrents un avantage.

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

La mise à jour du supplément macOS Catalina 10.15.4 cause plus de problèmes quelle nen résout

Récemment, Apple a publié macOS Catalina 10.15.4, une mise à jour supplémentaire pour résoudre les problèmes, mais il semble que la mise à jour cause davantage de problèmes, ce qui entraîne le bridage des machines mac. Lisez cet article pour en savoir plus

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux dextraction de données de Big Data

13 outils commerciaux d'extraction de données de Big Data

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Quest-ce quun système de fichiers de journalisation et comment fonctionne-t-il ?

Notre ordinateur stocke toutes les données d'une manière organisée connue sous le nom de système de fichiers de journalisation. C'est une méthode efficace qui permet à l'ordinateur de rechercher et d'afficher des fichiers dès que vous appuyez sur la recherche.https://wethegeek.com/?p=94116&preview=true

Singularité technologique : un futur lointain de la civilisation humaine ?

Singularité technologique : un futur lointain de la civilisation humaine ?

Alors que la science évolue à un rythme rapide, prenant le pas sur une grande partie de nos efforts, les risques de nous soumettre à une Singularité inexplicable augmentent également. Lisez, ce que la singularité pourrait signifier pour nous.

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques danalyse des mégadonnées : partie 1

Un aperçu de 26 techniques d'analyse des mégadonnées : partie 1

Limpact de lintelligence artificielle dans les soins de santé 2021

Limpact de lintelligence artificielle dans les soins de santé 2021

L'IA dans le domaine de la santé a fait de grands progrès au cours des dernières décennies. Ainsi, l'avenir de l'IA dans les soins de santé continue de croître de jour en jour.