Red Hat, Alma Linux : Installer et utiliser NGINX
Table des matières
Nginx est un serveur HTTP, c'est le deuxième plus utilisé sur le web avec Apache.
Attention, si vous installez un serveur Web, les ports 80 (HTTP) et 443 (HTTPS) sont utilisés. Donc attention à ne pas installer apache et ngnix en même temps.
Sur Enterprise Linux 7, nginx se trouve dans les dépôts epel, ce dépôt doit être installé.
Dans Enterprise Linux 7, on procedera à l'installation via :
Dans Enterprise Linux 8, on utilisera :
Dans Enterprise Linux 8, on pourra utiliser une version plus récente avec les modules :
Pour lister les versions :
Et pour installer une version spécifique (exemple version 1.18) :
On démarre le service et on l'active ensuite au démarrage :
On autorise dans le pare-feu le protocole http (ici si la zone de l'interface est public) :
A ce stade, on peut tester d'afficher la page web en http par défaut pour vérifier que tout fonctionne.
Les fichiers de configuration se trouvent dans /etc/nginx.
Le fichier de configuration central est nginx.conf :
On remarque que la partie HTTPS est commentée par défaut.
On peut ajouter des fichiers de configuration personnalisés dans conf.d. Par exemple, on créé un fichier avec l'extension .conf.
Exemple avec /etc/nginx/conf.d/linuxtricks.conf
La documentation sur les différentes directives sont sur https://nginx.org/en/docs/ Chapitre modules references
Après chaque modifications, il est nécessaire de recharger le service nginx.
A noter que nginx dispose d'une option permettant de vérifier la cohérence du fichier de config :
Si les tests sont OK :
On peut recharger nginx :
Dans la plupart des distributions Linux, PHP installe en dépendance apache.
Dans le contexte nginx, on va utiliser PHP-FPM.
EL 7 :
EL 8 :
Bien sûr, tous les modules php-* nécessaires sont installables, par exemple :
EL 7 :
EL 8 :
Dans le fichier nginx.conf changer
par
Et ajouter les informations suivantes pour traiter les requêtes des pages PHP :
On édite ensuite la config de php-fpm pour indiquer nginx comme utilisateur :
On démarre le service et on l'active ensuite au démarrage :
Pour la génération des certificats, se reporter à l'article : https://www.linuxtricks.fr/wiki/openssl-creation-de-certificats-et-ca-autosignes
On décommentera ensuite la section qui écoute sur https, et on renseignera nos certificats :
Prenons un exemple simple, la machine répond aux noms :
vhost155-1.linuxtricks.lan
vhost155-2.linuxtricks.lan
La création de virtualhosts résulte dans le fait de créer autant de server block avec la valeur server_name :
Plaçons nos vhosts dans /etc/nginx/conf.d/vhost.conf :
On redémarre le service nginx et c'est en place !
Je reprends un exemple avec mon virtualhost HTTP vhost155-2.linuxtricks.lan :
Et son bloc associé HTTPS :
Pour faire une redirection du HTTP vers HTTPS, on va modifier le bloc HTTP en indiquant juste un return 301 comme ceci :
Cet article a été vérifié avec RedHat Enterprise Linux, CentOS et Alma Linux
Introduction
Nginx est un serveur HTTP, c'est le deuxième plus utilisé sur le web avec Apache.
Attention, si vous installez un serveur Web, les ports 80 (HTTP) et 443 (HTTPS) sont utilisés. Donc attention à ne pas installer apache et ngnix en même temps.
Prérequis
Sur Enterprise Linux 7, nginx se trouve dans les dépôts epel, ce dépôt doit être installé.
Installation
Dans Enterprise Linux 7, on procedera à l'installation via :
Code BASH :
yum install nginx
Dans Enterprise Linux 8, on utilisera :
Code BASH :
dnf install nginx
Dans Enterprise Linux 8, on pourra utiliser une version plus récente avec les modules :
Pour lister les versions :
Code BASH :
dnf module list nginx
Et pour installer une version spécifique (exemple version 1.18) :
Code BASH :
dnf module install nginx:1.18
On démarre le service et on l'active ensuite au démarrage :
Code BASH :
systemctl enable --now nginx
On autorise dans le pare-feu le protocole http (ici si la zone de l'interface est public) :
Code BASH :
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
A ce stade, on peut tester d'afficher la page web en http par défaut pour vérifier que tout fonctionne.
Configuration de base
Les fichiers de configuration se trouvent dans /etc/nginx.
Le fichier de configuration central est nginx.conf :
Code BASH :
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } }
On remarque que la partie HTTPS est commentée par défaut.
On peut ajouter des fichiers de configuration personnalisés dans conf.d. Par exemple, on créé un fichier avec l'extension .conf.
Exemple avec /etc/nginx/conf.d/linuxtricks.conf
Code BASH :
server_tokens off; server_names_hash_max_size 512; server_names_hash_bucket_size 128; server_name_in_redirect off;
La documentation sur les différentes directives sont sur https://nginx.org/en/docs/ Chapitre modules references
Après chaque modifications, il est nécessaire de recharger le service nginx.
A noter que nginx dispose d'une option permettant de vérifier la cohérence du fichier de config :
Code BASH :
nginx -t -c /etc/nginx/nginx.conf
Si les tests sont OK :
Code :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
On peut recharger nginx :
Code BASH :
systemctl reload nginx
Nginx et PHP
Dans la plupart des distributions Linux, PHP installe en dépendance apache.
Dans le contexte nginx, on va utiliser PHP-FPM.
EL 7 :
Code BASH :
yum install php-fpm
EL 8 :
Code BASH :
dnf install php-fpm
Bien sûr, tous les modules php-* nécessaires sont installables, par exemple :
EL 7 :
Code BASH :
yum install php-mysql php-pdo php-gd
EL 8 :
Code BASH :
dnf install php-mysql php-pdo php-gd
Dans le fichier nginx.conf changer
Code :
location / {
}
par
Code :
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
Et ajouter les informations suivantes pour traiter les requêtes des pages PHP :
Code :
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
On édite ensuite la config de php-fpm pour indiquer nginx comme utilisateur :
Code BASH :
vi /etc/php-fpm.d/www.conf
Code :
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
On démarre le service et on l'active ensuite au démarrage :
Code BASH :
systemctl enable --now php-fpm
Ngnix et HTTPS
Pour la génération des certificats, se reporter à l'article : https://www.linuxtricks.fr/wiki/openssl-creation-de-certificats-et-ca-autosignes
On décommentera ensuite la section qui écoute sur https, et on renseignera nos certificats :
Code TEXT :
server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name _; root /usr/share/nginx/html; ssl_certificate "/etc/ssl/nginx/srvwww.linuxtricks.lan.crt"; ssl_certificate_key "/etc/ssl/nginx/srvwww.linuxtricks.lan.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
NGINX et les Virtualhosts
Prenons un exemple simple, la machine répond aux noms :
vhost155-1.linuxtricks.lan
vhost155-2.linuxtricks.lan
La création de virtualhosts résulte dans le fait de créer autant de server block avec la valeur server_name :
Plaçons nos vhosts dans /etc/nginx/conf.d/vhost.conf :
Code BASH :
vi /etc/nginx/conf.d/vhost.conf
Code TEXT :
server { listen 80; server_name vhost155-1.linuxtricks.lan; location / { root /var/www/vhost155-1/; index index.html index.htm; } } server { listen 80; server_name vhost155-2.linuxtricks.lan; location / { root /var/www/vhost155-2/; index index.html index.htm; } }
On redémarre le service nginx et c'est en place !
NGINX et redirection HTTP vers HTTPS
Je reprends un exemple avec mon virtualhost HTTP vhost155-2.linuxtricks.lan :
Code TEXT :
server { listen 80; server_name vhost155-2.linuxtricks.lan; location / { root /var/www/vhost155-2/; index index.html index.htm; } }
Et son bloc associé HTTPS :
Code TEXT :
server { listen 443 ssl http2; server_name vhost155-2.linuxtricks.lan; ssl_certificate "/etc/ssl/nginx/vhost155-2.linuxtricks.lan.crt"; ssl_certificate_key "/etc/ssl/nginx/vhost155-2.linuxtricks.lan.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; location / { root /var/www/vhost155-2/; index index.html index.htm; } }
Pour faire une redirection du HTTP vers HTTPS, on va modifier le bloc HTTP en indiquant juste un return 301 comme ceci :
Code TEXT :
server { listen 80; server_name vhost155-2.linuxtricks.lan; return 301 https://$server_name$request_uri; }