GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment construire Nginx à partir de la source sur CentOS 7

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 didacticiel, nous allons créer Nginx avec tous les modules disponibles dans la version open source de Nginx et nous utiliserons mainline  version qui est 1.15.7 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 le système CentOS 7.
  • Un utilisateur non root avec des privilèges sudo.

Étapes initiales

Vérifiez la version de CentOS :

cat /etc/centos-release
# CentOS Linux release 7.6.1810 (Core)

Configurez le fuseau horaire :

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

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

sudo yum update -y

Installez les packages vim, curl, wget et tree :

sudo yum install -y vim curl wget tree

Construire Nginx à partir de la source

Nginx est un programme écrit en C , vous devrez donc d'abord installer un outil de compilation :

sudo yum groupinstall -y 'Development Tools'

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.7.tar.gz && tar zxvf nginx-1.15.7.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 yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel

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

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.7/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 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/lib64/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=CentOS \
            --builddir=nginx-1.15.7 \
            --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/lib64/perl5 \
            --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/lib64/nginx/modules vers /etc/nginx/modules annuaire. etc/nginx/modules est un emplacement standard pour les modules Nginx :

sudo ln -s /usr/lib64/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.7 (CentOS)
# built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
# 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/lib64/nginx/modules
# . . .
# . . .

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

sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx

Vérifiez la syntaxe Nginx 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 :

REMARQUE  : L'emplacement du PID Le fichier et le binaire Nginx peuvent être différents selon la façon dont Nginx a été compilé.

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

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

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.15.7/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.7/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.7/ 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 qui est pris en charge 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.


Cent OS
  1. Comment compiler Brotli à partir de la source sur CentOS 7

  2. Comment créer des packages à partir de la source à l'aide de CheckInstall

  3. Comment mettre à niveau CentOS 6.10 à partir de CentOS 6.9-6.0

  4. Comment mettre à niveau CentOS 7.8 à partir de CentOS 7.7-7.0

  5. Comment compiler et installer FFmpeg à partir de la source dans CentOS/RHEL ?

Comment construire Nginx à partir de la source sur Fedora 29

Comment construire des paquets Debian à partir de la source

Comment installer Nginx sur CentOS

Comment migrer de CentOS 8 vers AlmaLinux 8.

Comment installer Nginx sur CentOS 6

Comment installer Nginx sur CentOS 7 ?