Passer au contenu principal

Configuration Nginx avec PHP et MariaDB

Configuration pour le tutoriel : 

  • 1 Vm Debian 10
  • 1 go de RAM
  • 20 go de disque dur

Installation de Nginx et php-fpm avec les extension php communément utilisé dans les applications avec php (Wordpress,OCS Inventory, Bookstack, GLPI etc...) et un serveur de base de donnée MariaDB

# Installation de Apache2 et de PHP-FPM
apt install nginx php-fpm mariadb-server
# Installation des extensions PHP communément utilisé
apt install php-fpm php-common php-mbstring php-xmlrpc php-soap php-gd \
php-mysql php-xml php-intl php-mysql php-cli php-ldap php-zip php-curl php-apcu php-cas php-bz2 php-imap php-tidy

Désactiver Apache2 si il est installé avec les paquets PHP

systemctl disable --now apache2
Installation base de donnée MariaDB

Sécuriser la base de donnée

mysql_secure_installation

Installer une base de donnée

# Connexion à la BDD en root
mysql -u root
# Création de la BDD
CREATE DATABASE Application_Web_DB;
GRANT ALL ON Application_Web_DB.* TO 'Application_Web_DB' IDENTIFIED BY 'Application_Web_MDP';
FLUSH PRIVILEGES;
Configuration serveur Nginx

Voici un exemple de fichier de configuration apache avec PHP et HTTPS générique
Je me suis basé sur :  Mozilla SSL Configuration Generator Nginx Modern

Placer la configuration web dans /etc/nginx/sites-avalables/Application_Web.conf

server {
# Ecoute IPV4/IPV6 Port 80 HTTP
  listen 80 ;
  listen [::]:80 ;

  # Nom du serveur (doit être le nom dns complet ou FQDN)
  server_name NOM_Serveur.domaine.fr
    
# Redirection http vers https
  return 301 https://$host$request_uri;
}

server {
# Ecoute IPV4/IPV6 Port 443 HTTPS
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

# Nom du serveur (doit être le nom dns complet ou FQDN)
  server_name NOM_Serveur.domaine.fr;

# Augmentation taille fichier en envoi sécurisé
 client_max_body_size 100m;
 client_body_timeout 120s;

# Configuration SSL (protocole,methode d'échange et méthode préféré par le serveur)
	ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

# On place nos certificats
  ssl_certificate     /root/certs/Application_Web/MyCertificate.crt;
  ssl_certificate_key /root/certs/Application_Web/MyKey.key;

# Emplacement du repertoire racine du site web
  root /var/www/Application/public;

# Fichier index à servir par defaut
  index index.php index.html;

# Quand le client demande la racine servir le fichier index.php
  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

# Configuration PHP 7.3 avec FastCGI
  location ~ \.php$ {
    fastcgi_index index.php;
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
  }
}

Créer le lien symbolique vers /etc/nginx/sites-enabled/

ln -s /etc/nginx/sites-available/Application_Web.conf /etc/nginx/sites-enabled/

Vérifier le fichier de configuration nginx

nginx -t