🌐 Installer Nginx + PHP-FPM sur un VPS#
Apprenez à installer et configurer Nginx avec PHP-FPM sur votre VPS pour créer un serveur web haute performance. Cette stack est idéale pour WordPress, Laravel, Symfony et autres applications PHP.
🎯 Objectifs#
- ✅ Installer Nginx et PHP-FPM sur Ubuntu/Debian
- ⚡ Optimiser la configuration pour les performances
- 🔧 Configurer des virtual hosts pour plusieurs sites
- 🛠️ Tester et valider l'installation
- 🔒 Appliquer les bonnes pratiques de sécurité
🧰 Prérequis#
- VPS sous Ubuntu 20.04+ ou Debian 11+
- Accès root ou sudo
- Connexion SSH active
- Nom de domaine pointant vers votre VPS (optionnel pour les tests)
1️⃣ Préparation du système#
📦 Mise à jour du système#
# Mise à jour des paquets sudo apt update && sudo apt upgrade -y # Installation des outils essentiels sudo apt install -y curl wget gnupg2 software-properties-common
🔧 Ajout du repository PHP (pour avoir la dernière version)#
# Ajout du repository Ondrej pour PHP sudo add-apt-repository ppa:ondrej/php -y sudo apt update
2️⃣ Installation de Nginx#
📥 Installation du serveur web#
# Installation de Nginx sudo apt install nginx -y # Démarrage et activation automatique sudo systemctl start nginx sudo systemctl enable nginx # Vérification du statut sudo systemctl status nginx
🌐 Test de base#
Ouvrez votre navigateur et accédez à http://votre-ip-serveur
. Vous devriez voir la page d'accueil Nginx.
# Vérifier que Nginx écoute sur le port 80 sudo netstat -tlnp | grep :80
3️⃣ Installation de PHP-FPM#
📥 Installation de PHP et extensions essentielles#
# Installation de PHP 8.2 avec FPM et extensions courantes sudo apt install -y php8.2-fpm php8.2-cli php8.2-common php8.2-mysql \ php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml \ php8.2-bcmath php8.2-intl php8.2-opcache php8.2-readline # Démarrage et activation de PHP-FPM sudo systemctl start php8.2-fpm sudo systemctl enable php8.2-fpm # Vérification du statut sudo systemctl status php8.2-fpm
4️⃣ Configuration de Nginx pour PHP#
🗂️ Structure des répertoires#
# Création de la structure pour vos sites sudo mkdir -p /var/www/html/monsite sudo chown -R www-data:www-data /var/www/html/ sudo chmod -R 755 /var/www/html/
📝 Configuration d'un site (virtual host)#
# Création du fichier de configuration sudo nano /etc/nginx/sites-available/monsite
Configuration complète :
server { listen 80; listen [::]:80; # Remplacez par votre nom de domaine server_name monsite.com www.monsite.com; # Répertoire racine du site root /var/www/html/monsite; index index.php index.html index.htm; # Logs spécifiques au site access_log /var/log/nginx/monsite_access.log; error_log /var/log/nginx/monsite_error.log; # Configuration PHP location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # Sécurité - bloquer l'accès aux fichiers sensibles location ~ /\.ht { deny all; } location ~ /\.git { deny all; } # Optimisation - cache des fichiers statiques location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|zip)$ { expires 1y; add_header Cache-Control "public, immutable"; } # Gestion des URLs (pour WordPress, Laravel, etc.) location / { try_files $uri $uri/ /index.php?$query_string; } }
✅ Activation du site#
# Activation du site (création du lien symbolique) sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/ # Suppression du site par défaut (optionnel) sudo rm /etc/nginx/sites-enabled/default # Test de la configuration sudo nginx -t # Rechargement de Nginx sudo systemctl reload nginx
5️⃣ Test complet de l'installation#
📄 Création d'un fichier de test PHP#
# Création d'un fichier PHP de test sudo nano /var/www/html/monsite/info.php
<?php phpinfo(); ?>
🌐 Tests dans le navigateur#
Test PHP : http://votre-domaine/info.php
⚠️ Sécurité : Supprimez le fichier
info.php
après les tests !
sudo rm /var/www/html/monsite/info.php
6️⃣ Optimisations et sécurité#
⚡ Configuration optimisée de Nginx#
# Édition du fichier principal de Nginx sudo nano /etc/nginx/nginx.conf
Optimisations dans la section http
:
# Performance worker_processes auto; worker_connections 1024; # Compression gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json; # Sécurité server_tokens off; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; # Cache des connexions keepalive_timeout 65; keepalive_requests 100;
🔄 Application des changements#
# Redémarrage Nginx sudo systemctl restart nginx # Vérification du bon fonctionnement sudo systemctl status nginx
7️⃣ Gestion de plusieurs sites#
📁 Structure pour plusieurs sites#
# Création de répertoires pour différents sites sudo mkdir -p /var/www/html/{site1,site2,blog} sudo chown -R www-data:www-data /var/www/html/ # Création de configurations séparées sudo cp /etc/nginx/sites-available/monsite /etc/nginx/sites-available/site2 sudo nano /etc/nginx/sites-available/site2
8️⃣ Maintenance et surveillance#
📊 Commandes de surveillance#
# Statut des services sudo systemctl status nginx php8.2-fpm # Logs en temps réel sudo tail -f /var/log/nginx/error.log sudo journalctl -fu php8.2-fpm # Processus PHP-FPM actifs sudo ps aux | grep php-fpm # Connexions actives sudo netstat -an | grep :80
🔧 Commandes de gestion#
# Redémarrage sans interruption sudo systemctl reload nginx sudo systemctl reload php8.2-fpm # Test de configuration avant application sudo nginx -t sudo php-fpm8.2 -t
✅ Résumé de l'installation#
Votre serveur Nginx + PHP-FPM est maintenant opérationnel avec :
- ✅ Nginx optimisé et sécurisé
- ✅ PHP 8.2 avec extensions essentielles
- ✅ PHP-FPM opérationnel
- ✅ Virtual hosts configurés
- ✅ Sécurité de base appliquée