GNU/Linux >> Tutoriels Linux >  >> Debian

Installer Nginx avec PHP et MySQL (LEMP) plus SSL sur Debian 10

LEMP est un acronyme qui représente la pile logicielle suivante :Linux noyau, Nginx serveur Web, MariaDB base de données (ou MySQL ), et le PHP langage de programmation côté serveur. Ce logiciel est aujourd'hui largement utilisé sur les serveurs sur Internet pour fournir des sites Web dynamiques ou des applications Web interactives.

Nginx est un serveur Web moderne et économe en ressources qui est activement développé et est le deuxième serveur Web le plus utilisé sur Internet après le serveur HTTP Apache. Il est particulièrement rapide car il utilise une approche asynchrone et pilotée par les événements pour traiter les demandes.

Ce tutoriel vous montre comment installer et configurer la pile LEMP (Nginx avec MariaDB et PHP 7) sur la dernière version de Debian 10.

CONFIGURATIONS

  • La dernière version du système d'exploitation Debian 10, qui peut être obtenue à partir du lien suivant https://www.debian.org/CD/http-ftp/, installée à partir de zéro sur un VPS, une machine virtuelle ou directement sur une machine dédiée.
  • Accès direct à la console du serveur ou à une connexion SSH distante.
  • Une interface réseau configurée avec une adresse IP statique pour la machine
  • Un nom de domaine public enregistré avec des enregistrements DNS A et CNAME (www) configurés côté serveur de noms. Dans ce guide, nous utilisons le domaine example.com comme exemple.

Étape 1 :configuration initiale

La première étape consiste à vous connecter avec root ou avec un utilisateur disposant des privilèges root sur votre système et à mettre à jour les composants Debian 10 (mises à niveau du noyau, mises à jour de packages et correctifs de sécurité) en exécutant les commandes suivantes.

sudo apt  update
sudo apt upgrade
sudo apt dist-upgrade

Ensuite, assurez-vous d'ajouter un nom descriptif pour le nom d'hôte de votre machine en exécutant la commande ci-dessous. Ensuite, vous devrez redémarrer le système afin d'appliquer le nouveau nom d'hôte en conséquence.

sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6

Ensuite, allez-y et installez les utilitaires net-tools wget, curl et bash-completion afin de les utiliser plus tard pour administrer facilement votre serveur Debian.

sudo apt install net-tools sudo wget curl bash-completion

Étape 2 :Installez le serveur Web Nginx

Nginx est un serveur Web moderne et économe en ressources utilisé pour afficher des pages Web aux visiteurs sur Internet. Installez le serveur Web Nginx à partir du référentiel Debian 10 en exécutant la commande ci-dessous dans la console de votre serveur.

sudo apt-get install nginx

Comme indiqué dans l'image ci-dessus, le gestionnaire de packages apt vérifiera les dépendances supplémentaires du package et vous demandera si vous acceptez de poursuivre le processus d'installation. Répondez par oui (y ) afin d'installer Nginx.

Ensuite, exécutez netstat afin d'afficher les sockets réseau sur votre système et de vérifier si le démon nginx écoute sur le port 80/TCP. Alternativement, vous pouvez émettre systemctl afin de vérifier l'état du démon nginx comme illustré dans l'image ci-dessous.

sudo netstat -tlp
sudo netstat –tlpn
sudo systemctl status nginx.service

Une fois que le serveur nginx est opérationnel sur votre système, lancez ifconfig commande afin d'afficher les informations des interfaces réseau et de lister les adresses IP de votre machine. Ensuite, ouvrez un navigateur et visitez la page Web par défaut de Nginx via le protocole HTTP en ajoutant l'adresse IP dans votre navigateur. Le message « Bienvenue à Nginx ! » devrait s'afficher dans la fenêtre de votre navigateur.

http://www.example.com

ou

http://192.168.0.100

Étape 3 :Activer le protocole Nginx HTTP/2.0

Par défaut, les dernières versions des binaires Nginx fournies par les référentiels Debian 10 sont construites avec le protocole HTTP/2.0. HTTP/2.0 est intégré aux protocoles TSL/SSL et peut améliorer la vitesse de chargement des pages Web via des transactions sécurisées.

Tous les navigateurs modernes, tels que Chrome ou Firefox, devraient prendre en charge ce protocole par défaut. Cependant, notez que les navigateurs Microsoft Internet Explorer et Microsoft Edge ne peuvent pas encore analyser le protocole http2.

Pour activer le protocole HTTP/2.0 dans Nginx sur Debian 10, vous devez apporter quelques modifications au fichier de configuration Nginx par défaut ou créer un nouveau fichier de configuration et ajouter le bloc de code TLS pour les serveurs 443. Pour ce faire, créez d'abord une sauvegarde de la configuration par défaut des sites Nginx disponibles en exécutant la commande suivante. Confirmez que la sauvegarde a réussi en répertoriant le contenu du répertoire sites-available.

sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/

Ensuite, créez un fichier de configuration Nginx TLS à l'aide d'un éditeur de texte et ajoutez le contenu suivant.

sudo nano /etc/nginx/sites-available/default-ssl

ssl par défaut extrait de fichier :

    server {
                listen 443 ssl http2 default_server;
                listen [::]:443 ssl http2 default_server;
                #server_name  www.domain.tld;
                server_name _;
                                
                root /var/www/html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                
                #SSL Certificates
                ssl_certificate "/etc/nginx/ssl/cert.pem";
                ssl_certificate_key "/etc/nginx/ssl/privekey.pem";
                ssl_dhparam /etc/nginx/ssl/dhparam.pem;
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
                ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
                #includeSubDomains" always;
 
                location / {
                index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
                                set $cache_uri $request_uri;
                
                location ~ /.well-known {
                allow all;
                               }
               location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
                #
                #             # With php-fpm (or other unix sockets):
                              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }
 
                # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
                   }

La déclaration qui permet l'utilisation du protocole HTTP/2.0 est représentée par le mot http2 à partir de la ligne ci-dessous.

 listen 443 ssl http2 default_server;

Si les navigateurs de vos visiteurs ne prennent pas en charge le protocole HTTP2, supprimez le http2 mot de vos configurations de serveur afin de désactiver le protocole et de redémarrer le service nginx pour appliquer les modifications.

Si vous avez un domaine enregistré ou si vous utilisez un hébergement virtuel basé sur des adresses IP, vous devez ajouter votre nom de domaine ou votre adresse IP après le nom_du_serveur directive comme indiqué dans l'exemple ci-dessous.

server_name www.example.com example.com;

Une fois que vous avez terminé de modifier le fichier de configuration par défaut de Nginx avec les paramètres ci-dessus

Configurer SSL dans Nginx

Dans le fichier de configuration TSL ci-dessus de nginx, nous avons spécifié le chemin du certificat et de la clé TLS. Puisque nous n'avons pas encore installé les clés dans votre système, entrez la commande suivante pour générer le fichier et la clé du certificat SSL auto-signé. Lors de la génération du certificat SSL, une série de questions vous sera posée. Entrez le code à deux chiffres de votre pays, état ou province, le nom de votre ville, le nom de votre organisation, le nom de l'unité de votre organisation, le nom commun de votre serveur et une adresse e-mail valide. Vous devez vous assurer de définir le nom commun afin qu'il corresponde à l'enregistrement FQDN de votre ordinateur à partir du serveur DNS ou à l'adresse IP de votre serveur utilisé pour accéder au site Web. Le certificat et la clé sont stockés dans un nouveau répertoire sous le répertoire nginx nommé ssl, comme illustré dans la capture d'écran suivante.

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls /etc/nginx/ssl/

Générez également un nouveau chiffrement Diffie-Hellman fort, qui se trouve dans le fichier de configuration ci-dessus sur ssl_dhparam ligne de déclaration, en exécutant la commande ci-dessous :

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Enfin, après avoir généré la clé Diffie-Hellman, activez le fichier de configuration TLS en créant un lien symbolique pour default-ssl fichier de configuration de sites-available répertoire vers sites activés répertoire en exécutant la commande suivante.

ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

Ensuite, testez le fichier de configuration Nginx pour détecter les erreurs de syntaxe et, si tout va bien, redémarrez le démon Nginx afin d'appliquer toutes les modifications en exécutant les commandes ci-dessous.

sudo nginx -t
sudo systemctl restart nginx.service

Vérifier si la configuration SSL a réussi

Afin de confirmer si le serveur Web Nginx est lié au port SSL, émettez la commande netstat et vérifiez si le port 443 est affiché en mode d'écoute.

netstat -tlpn | grep nginx

La capture d'écran ci-dessous illustre les étapes ci-dessus.

Ensuite, accédez à votre nom de domaine ou à l'adresse IP de votre serveur via le protocole HTTP à partir d'un navigateur pour afficher la page par défaut de nginx. Étant donné que vous utilisez des certificats auto-signés, une erreur devrait s'afficher dans votre navigateur. Confirmez l'erreur afin de passer à la page principale par défaut de nginx.

Dans le cas où Nginx ne fournit pas un index.html par défaut page dans le répertoire webroot, lancez la commande suivante pour créer la page d'index.

echo "test page" | tee /var/www/html/index.html

Afin de confirmer la présence du protocole HTTP/2.0 annoncé par Nginx, lancez la commande ci-dessous. Recherchez h2 mot dans les protocoles annoncés par le serveur.

 openssl s_client -connect localhost:443 -nextprotoneg ''

Vous pouvez également visualiser l'état de la connexion et vérifier si le protocole http2 est annoncé par Nginx depuis le navigateur Chrome en appuyant sur la touche de fonction F12 et demander la page. Pour afficher le protocole utilisé par la requête, allez dans l'onglet Réseau, faites un clic droit sur le menu Type et cochez Protocole déposé. Le protocole HTTP2 doit être affiché sous la forme h2 dans la colonne du protocole actuel, comme illustré dans la capture d'écran ci-dessous.

Étape 4 :Installez PHP 7

Le serveur Web Nginx peut servir du contenu Web dynamique à l'aide d'un interpréteur de langage de programmation PHP via le gestionnaire de processus PHP FastCGI auquel Nginx transmet les demandes de traitement. Le gestionnaire de processus FastCGI peut être obtenu en installant le php-fpm paquet pré-compilé offert par les dépôts officiels Debian 9.

Afin d'installer le gestionnaire de processus php-fpm et l'interpréteur PHP7.0 dans le système avec les packages supplémentaires qui permettront à PHP de communiquer avec le serveur Web Nginx, lancez la commande ci-dessous sur la console de votre serveur :

sudo apt installer php7.3 php7.3-fpm php7.3-curl php7.3-gd

Démarrer PHP-FPM

Une fois l'interpréteur PHP 7.3 installé avec succès sur votre système, démarrez et vérifiez le démon php7.3-fpm en exécutant la commande ci-dessous :

sudo systemctl start php7.3-fpm
sudo systemctl status php7.3-fpm

Dans le fichier de configuration TLS ci-dessus de Nginx, nous avons déjà ajouté les configurations de bloc pour le gestionnaire de processus PHP FastCGI afin de servir du contenu dynamique. Le bloc de code qui permet à Nginx d'utiliser l'interpréteur PHP est illustré dans l'extrait ci-dessous, donc aucune étape n'est nécessaire pour modifier le fichier de configuration Nginx TSL. Le signe hashtag # du début des lignes dans la capture d'écran ci-dessous sont des commentaires. Les lignes commentées des fichiers de configuration sont ignorées par défaut par le serveur Web Nginx.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

Tester la configuration PHP

Afin de tester et de valider si Nginx peut correctement transmettre les fichiers php au processeur PHP, créez un PHP info.php testez le fichier de configuration en lançant la commande ci-dessous

sudo su -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'

Ensuite, visitez la page d'informations php dans votre navigateur Web en accédant au nom de domaine ou à l'adresse IP publique de votre serveur suivi de /info.php comme indiqué dans l'image ci-dessous.

https://www.example.com/info.php

ou

http://192.168.0.100/info.php

Vous pouvez également vérifier si le protocole HTTP/2.0 est annoncé par le serveur en recherchant la ligne $_SERVER[‘SERVER_PROTOCOL’] sur les variables PHP.

Pour installer d'autres modules PHP7.3, exécutez la recherche apt php7.3 pour trouver un module PHP spécifique et l'installer. Si vous envisagez d'installer un système de gestion de contenu, tel que WordPress, installez ces modules supplémentaires :

sudo apt install php7.3-mcrypt php7.3-mbstring

Cependant, les modules PHP nouvellement installés ne sont pas activés par défaut sur votre système. Pour les activer, redémarrez le service PHP-FPM.

sudo systemctl restart php7.3-fpm.service

Étape 5 :Installer la base de données MariaDB

Enfin, la dernière pièce du puzzle de la pile LAMP manque dans la base de données. Le composant LEMP de la base de données MariaDB est utilisé pour stocker les enregistrements dans des tables et des colonnes. Il va gérer dynamiquement les données d'une application web. Pour installer MariaDB, exécutez la commande suivante dans la console de votre serveur. Ensuite, redémarrez le démon PHP FPM pour activer le module PHP-MySQL requis pour accéder à la base de données.

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

Par défaut, le compte root du système ou les utilisateurs disposant de privilèges root peuvent accéder à la base de données sans fournir de mot de passe. Pour modifier ce comportement afin que MySQL demande un mot de passe chaque fois qu'un utilisateur du système tente d'accéder à la base de données, connectez-vous à la base de données MySQL à l'aide de l'interface de ligne de commande avec les privilèges root et exécutez les commandes suivantes dans la console MySQL :

sudo mysql
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> exit

Définir le mot de passe root dans MariaDB

À l'étape suivante, assurez-vous de sécuriser MariaDB en exécutant le script de sécurité mysql_secure_installation. Il est fourni par le package d'installation des dépôts Debian. Lors de l'exécution, le script posera une série de questions conçues pour sécuriser la base de données MariaDB. Tels que :pour modifier le mot de passe root MySQL, supprimer les utilisateurs anonymes, désactiver les connexions root à distance et supprimer la base de données de test. Exécutez le script en exécutant la commande ci-dessous. Répondez oui à toutes les questions posées afin de sécuriser complètement le démon MySQL. Utilisez la sortie de script ci-dessous, sauf comme guide.

sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y

 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Enfin, afin de tester les fonctionnalités de MariaDB, connectez-vous à la base de données depuis la console et exécutez la commande suivante. Une liste des bases de données par défaut doit être affichée dans la console MariaDB. Quittez la console MariaDB avec exit déclaration.

mysql -u root –p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> exit

C'est tout! Le serveur Web Nginx, la base de données MariaDB et le langage de programmation PHP sont installés sur votre machine Debian 10. Vous pouvez maintenant commencer à créer des sites Web dynamiques ou des applications Web pour vos visiteurs.


Debian
  1. Installer Lets Encrypt and Secure Nginx avec SSL/TLS dans Debian 9

  2. Comment installer Nginx avec PHP et MySQL (pile LEMP) sur Ubuntu 18.04

  3. Comment installer et configurer PHP et Nginx (LEMP) sur Debian 11

  4. Comment installer et configurer un serveur LEMP (Nginx, MySQL et PHP) sur un VPS Debian 6 (squeeze)

  5. Comment installer la pile LEMP Nginx, MySQL, PHP sur Debian 11

Comment installer Nginx avec PHP + MySQL (LEMP) sur Debian 9

Comment installer Grav CMS avec Nginx sur Debian 9

Comment installer Nginx, MariaDB, PHP (pile LEMP) sur Debian 9

Comment installer Nginx avec PHP-FPM sur Debian 10

Comment installer LEMP WordPress Ubuntu et Debian avec Virtualhost

Comment installer phpBB avec LEMP (Nginx, MariaDB et PHP) sur Debian 11 Bullseye