Red Hat et dérivées version SERVEUR

Red Hat, Alma Linux : Installer et utiliser NGINX

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières


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 CentOS, nginx se trouve dans les dépôts epel, ce dépôt doit être installé.
Il est possible d'installer d'autres versions via les Software Collections, mais ce point ne sera pas abordé dans cet article.
Si tel n'est pas le cas, l'installer puis mettre à jour le système :
Code BASH :
yum install epel-release

Code BASH :
yum update

Installation



Dans CentOS 7, voici les paquets disponibles et leur description:
Code :
nginx-all-modules.noarch : A meta package that installs all available Nginx
nginx-filesystem.noarch : The basic directory layout for the Nginx server
nginx-mod-http-geoip.x86_64 : Nginx HTTP geoip module
nginx-mod-http-image-filter.x86_64 : Nginx HTTP image filter module
nginx-mod-http-perl.x86_64 : Nginx HTTP perl module
nginx-mod-http-xslt-filter.x86_64 : Nginx XSLT module
nginx-mod-mail.x86_64 : Nginx mail modules
nginx-mod-stream.x86_64 : Nginx stream modules
nginx.x86_64 : A high performance web server and reverse proxy server

On va donc installer me serveur web et ses modules :
Code BASH :
yum install nginx


On démarre le service et on l'active ensuite au démarrage :
Code BASH :
systemctl start nginx && systemctl enable 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 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 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.
Code BASH :
yum install php-fpm

Bien sûr, tous les modules php-* nécessaires sont installables, par exemple :
Code BASH :
yum 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 start php-fpm && systemctl enable php-fpm