Introduction
Nginx (prononcé "engine-x") est un serveur web haute performance, reconnu pour sa rapidité, sa stabilité et sa faible consommation de ressources. Combiné avec PHP-FPM (FastCGI Process Manager), il constitue une stack puissante pour héberger des applications PHP modernes comme WordPress, Laravel, Symfony ou Drupal.
Pourquoi choisir Nginx + PHP-FPM ?
| Caractéristique | Apache + mod_php | Nginx + PHP-FPM |
|---|---|---|
| Mémoire | Consommation élevée | Faible empreinte |
| Connexions simultanées | Limité | Des milliers |
| Fichiers statiques | Bon | Excellent |
| Configuration | .htaccess distribué | Centralisée |
| Performance | Bonne | Excellente |
Versions incluses par OS
| Système | Nginx | PHP | Kernel |
|---|---|---|---|
| Debian 13 "Trixie" | 1.26 | 8.4 | 6.12 LTS |
| Ubuntu 24.04 LTS | 1.24 | 8.3 | 6.8 |
📋 Prérequis
- Un VPS avec Ubuntu 24.04 LTS ou Debian 13 "Trixie"
- Accès root ou utilisateur avec privilèges sudo
- Connexion SSH établie
- Nom de domaine pointant vers l'IP du VPS (optionnel mais recommandé)
🔄 Étape 1 : Mise à jour du système
Avant toute installation, mettez à jour les paquets du système :
sudo apt update && sudo apt upgrade -y
Si un redémarrage est nécessaire :
[ -f /var/run/reboot-required ] && sudo reboot
📦 Étape 2 : Installer Nginx
Installation
sudo apt install nginx -y
Vérifier l'installation
nginx -v
Résultat attendu :
- Debian 13 :
nginx version: nginx/1.26.x - Ubuntu 24.04 :
nginx version: nginx/1.24.x
Vérifier le statut du service
sudo systemctl status nginx
Le service doit afficher active (running).
Commandes de gestion Nginx
| Action | Commande |
|---|---|
| Démarrer | sudo systemctl start nginx |
| Arrêter | sudo systemctl stop nginx |
| Redémarrer | sudo systemctl restart nginx |
| Recharger config | sudo systemctl reload nginx |
| Activer au démarrage | sudo systemctl enable nginx |
| Désactiver au démarrage | sudo systemctl disable nginx |
| Tester la configuration | sudo nginx -t |
Configurer le pare-feu (UFW)
Si UFW est activé, autorisez le trafic HTTP et HTTPS :
# Vérifier le statut UFW
sudo ufw status
# Autoriser Nginx (HTTP + HTTPS)
sudo ufw allow 'Nginx Full'
# Ou autoriser séparément
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Tester l'installation
Ouvrez votre navigateur et accédez à http://VOTRE_IP_VPS. Vous devriez voir la page d'accueil Nginx avec le message "Welcome to nginx!".
🐘 Étape 3 : Installer PHP-FPM
Pour Debian 13 "Trixie" (PHP 8.4)
sudo apt install php8.4-fpm php8.4-cli php8.4-common php8.4-mysql \
php8.4-zip php8.4-gd php8.4-mbstring php8.4-curl php8.4-xml \
php8.4-bcmath php8.4-intl php8.4-soap php8.4-opcache php8.4-readline -y
Pour Ubuntu 24.04 LTS (PHP 8.3)
sudo apt install php8.3-fpm php8.3-cli php8.3-common php8.3-mysql \
php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml \
php8.3-bcmath php8.3-intl php8.3-soap php8.3-opcache php8.3-readline -y
Installation d'une version spécifique via PPA (Ubuntu uniquement)
Si vous avez besoin d'une autre version de PHP sur Ubuntu :
# Ajouter le dépôt PPA Ondřej
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
# Exemple : installer PHP 8.4
sudo apt install php8.4-fpm php8.4-cli php8.4-common php8.4-mysql \
php8.4-zip php8.4-gd php8.4-mbstring php8.4-curl php8.4-xml \
php8.4-bcmath php8.4-intl php8.4-soap php8.4-opcache -y
Vérifier l'installation PHP
php -v
Résultat attendu :
- Debian 13 :
PHP 8.4.x (cli) - Ubuntu 24.04 :
PHP 8.3.x (cli)
Vérifier le statut de PHP-FPM
Debian 13 :
sudo systemctl status php8.4-fpm
Ubuntu 24.04 :
sudo systemctl status php8.3-fpm
Le service doit afficher active (running).
Identifier le socket PHP-FPM
Le socket est crucial pour la communication entre Nginx et PHP :
ls /run/php/
Résultat typique :
- Debian 13 :
php8.4-fpm.sock - Ubuntu 24.04 :
php8.3-fpm.sock
⚙️ Étape 4 : Configurer Nginx pour PHP-FPM
Modifier la configuration par défaut
Éditez le fichier de configuration par défaut :
sudo nano /etc/nginx/sites-available/default
Configuration pour Debian 13 (PHP 8.4)
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
# Configuration PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Bloquer l'accès aux fichiers .htaccess
location ~ /\.ht {
deny all;
}
}
Configuration pour Ubuntu 24.04 (PHP 8.3)
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
# Configuration PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Bloquer l'accès aux fichiers .htaccess
location ~ /\.ht {
deny all;
}
}
Tester la configuration
sudo nginx -t
Résultat attendu :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Redémarrer Nginx
sudo systemctl reload nginx
✅ Étape 5 : Tester PHP avec Nginx
Créer un fichier de test PHP
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
Accéder à la page de test
Ouvrez votre navigateur : http://VOTRE_IP_VPS/info.php
Vous devriez voir la page phpinfo() affichant :
- Version PHP (8.4.x ou 8.3.x)
- Server API : FPM/FastCGI
- Extensions installées
- Variables de configuration
Supprimer le fichier de test (sécurité)
sudo rm /var/www/html/info.php
⚠️ Sécurité : Ne laissez jamais un fichier
phpinfo()en production, il expose des informations sensibles.
🌐 Étape 6 : Créer un Virtual Host (Server Block)
Les virtual hosts permettent d'héberger plusieurs sites sur le même serveur.
Créer le répertoire du site
sudo mkdir -p /var/www/monsite.com/html
sudo chown -R $USER:$USER /var/www/monsite.com
sudo chmod -R 755 /var/www/monsite.com
Créer une page d'accueil
nano /var/www/monsite.com/html/index.php
Ajoutez :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Bienvenue sur MonSite.com</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
h1 { color: #333; }
</style>
</head>
<body>
<h1>MonSite.com fonctionne !</h1>
<p>Nginx + PHP-FPM configurés avec succès.</p>
<p>Version PHP : <?php echo phpversion(); ?></p>
</body>
</html>
Créer la configuration du virtual host
sudo nano /etc/nginx/sites-available/monsite.com
Pour Debian 13 (PHP 8.4) :
server {
listen 80;
listen [::]:80;
server_name monsite.com www.monsite.com;
root /var/www/monsite.com/html;
index index.php index.html index.htm;
# Logs
access_log /var/log/nginx/monsite.com.access.log;
error_log /var/log/nginx/monsite.com.error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Sécurité - bloquer les fichiers cachés
location ~ /\. {
deny all;
}
# Cache des fichiers statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt|woff|woff2|ttf|svg)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
Pour Ubuntu 24.04 (PHP 8.3) : Remplacez php8.4-fpm.sock par php8.3-fpm.sock.
Activer le virtual host
sudo ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/
Désactiver le site par défaut (optionnel)
sudo rm /etc/nginx/sites-enabled/default
Tester et recharger
sudo nginx -t
sudo systemctl reload nginx
🔒 Étape 7 : Installer un certificat SSL (Let's Encrypt)
Installer Certbot
sudo apt install certbot python3-certbot-nginx -y
Obtenir un certificat SSL
sudo certbot --nginx -d monsite.com -d www.monsite.com
Suivez les instructions :
- Entrez votre adresse email
- Acceptez les conditions
- Choisissez de rediriger HTTP vers HTTPS (recommandé)
Vérifier le renouvellement automatique
sudo certbot renew --dry-run
⚡ Étape 8 : Optimiser PHP-FPM
Configuration du pool PHP-FPM
Debian 13 :
sudo nano /etc/php/8.4/fpm/pool.d/www.conf
Ubuntu 24.04 :
sudo nano /etc/php/8.3/fpm/pool.d/www.conf
Paramètres recommandés selon la RAM
VPS 1-2 Go RAM :
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
VPS 4 Go RAM :
pm = dynamic
pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 1000
VPS 8+ Go RAM :
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 2000
Explication des paramètres
| Paramètre | Description |
|---|---|
pm | Mode de gestion des processus (static, dynamic, ondemand) |
pm.max_children | Nombre max de processus enfants |
pm.start_servers | Processus au démarrage |
pm.min_spare_servers | Min processus inactifs |
pm.max_spare_servers | Max processus inactifs |
pm.max_requests | Requêtes avant recyclage du processus |
Optimiser php.ini
Debian 13 :
sudo nano /etc/php/8.4/fpm/php.ini
Ubuntu 24.04 :
sudo nano /etc/php/8.3/fpm/php.ini
Paramètres recommandés :
; Mémoire
memory_limit = 256M
; Upload
upload_max_filesize = 64M
post_max_size = 64M
; Exécution
max_execution_time = 300
max_input_time = 300
max_input_vars = 3000
; Timezone
date.timezone = Europe/Paris
; OPcache (améliore les performances)
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.validate_timestamps = 1
; Sécurité
expose_php = Off
Redémarrer PHP-FPM
Debian 13 :
sudo systemctl restart php8.4-fpm
Ubuntu 24.04 :
sudo systemctl restart php8.3-fpm
⚡ Étape 9 : Optimiser Nginx
Configuration principale
sudo nano /etc/nginx/nginx.conf
Configuration optimisée :
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
# Paramètres de base
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
# Taille des buffers
client_max_body_size 64M;
client_body_buffer_size 128k;
# MIME types
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Compression Gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript
application/rss+xml application/atom+xml image/svg+xml;
# Includes
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Redémarrer Nginx
sudo nginx -t
sudo systemctl restart nginx
🛡️ Étape 10 : Sécuriser l'installation
Headers de sécurité
Ajoutez dans votre configuration server block :
# Headers de sécurité
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
Limiter les requêtes (rate limiting)
Dans /etc/nginx/nginx.conf, section http :
# Zones de limitation
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
Dans votre server block :
location / {
limit_req zone=one burst=20 nodelay;
limit_conn addr 10;
}
📁 Structure des fichiers
Nginx
| Chemin | Description |
|---|---|
/etc/nginx/nginx.conf | Configuration principale |
/etc/nginx/sites-available/ | Configurations disponibles |
/etc/nginx/sites-enabled/ | Configurations actives (liens symboliques) |
/etc/nginx/snippets/ | Snippets de configuration |
/var/log/nginx/ | Logs d'accès et d'erreur |
PHP-FPM
| Chemin (Debian 13) | Chemin (Ubuntu 24.04) | Description |
|---|---|---|
/etc/php/8.4/fpm/php.ini | /etc/php/8.3/fpm/php.ini | Configuration PHP |
/etc/php/8.4/fpm/pool.d/www.conf | /etc/php/8.3/fpm/pool.d/www.conf | Configuration du pool |
/run/php/php8.4-fpm.sock | /run/php/php8.3-fpm.sock | Socket FPM |
Sites web
| Chemin | Description |
|---|---|
/var/www/html/ | Site par défaut |
/var/www/monsite.com/html/ | Racine d'un site personnalisé |
🔧 Commandes utiles
Gestion des services
# Nginx
sudo systemctl start|stop|restart|reload|status nginx
# PHP-FPM (Debian 13)
sudo systemctl start|stop|restart|status php8.4-fpm
# PHP-FPM (Ubuntu 24.04)
sudo systemctl start|stop|restart|status php8.3-fpm
Tests et diagnostics
# Tester la config Nginx
sudo nginx -t
# Tester la config PHP-FPM (Debian 13)
sudo php-fpm8.4 -t
# Tester la config PHP-FPM (Ubuntu 24.04)
sudo php-fpm8.3 -t
# Voir les processus PHP-FPM
ps aux | grep php-fpm
# Voir les connexions actives
ss -tlnp | grep -E 'nginx|php'
# Logs en temps réel
sudo tail -f /var/log/nginx/error.log
Gestion des sites
# Activer un site
sudo ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/
# Désactiver un site
sudo rm /etc/nginx/sites-enabled/monsite.com
# Lister les sites actifs
ls -la /etc/nginx/sites-enabled/
🔍 Dépannage
"502 Bad Gateway"
Causes : PHP-FPM ne fonctionne pas ou mauvais socket
Solutions :
# Vérifier PHP-FPM (adapter la version)
sudo systemctl status php8.4-fpm
# Vérifier le socket
ls -la /run/php/
# Redémarrer PHP-FPM
sudo systemctl restart php8.4-fpm
"403 Forbidden"
Causes : Permissions incorrectes
Solutions :
# Corriger les permissions
sudo chown -R www-data:www-data /var/www/monsite.com
sudo chmod -R 755 /var/www/monsite.com
"404 Not Found" pour les fichiers PHP
Causes : Configuration PHP-FPM incorrecte
Vérifications :
- Le fichier existe bien
- La directive
rootest correcte dans Nginx - Le bloc
location ~ \.php$est présent - Le socket correspond à la version PHP installée
Page blanche (PHP non exécuté)
Causes : PHP-FPM non connecté à Nginx
Solutions :
# Vérifier la version du socket
ls /run/php/
# Comparer avec la config Nginx
grep fastcgi_pass /etc/nginx/sites-enabled/*
📋 Récapitulatif rapide
Installation complète Debian 13
# Mise à jour
sudo apt update && sudo apt upgrade -y
# Nginx
sudo apt install nginx -y
# PHP-FPM 8.4
sudo apt install php8.4-fpm php8.4-cli php8.4-common php8.4-mysql \
php8.4-zip php8.4-gd php8.4-mbstring php8.4-curl php8.4-xml \
php8.4-bcmath php8.4-intl php8.4-opcache -y
# Pare-feu
sudo ufw allow 'Nginx Full'
# SSL
sudo apt install certbot python3-certbot-nginx -y
Installation complète Ubuntu 24.04
# Mise à jour
sudo apt update && sudo apt upgrade -y
# Nginx
sudo apt install nginx -y
# PHP-FPM 8.3
sudo apt install php8.3-fpm php8.3-cli php8.3-common php8.3-mysql \
php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml \
php8.3-bcmath php8.3-intl php8.3-opcache -y
# Pare-feu
sudo ufw allow 'Nginx Full'
# SSL
sudo apt install certbot python3-certbot-nginx -y
💡 Bonnes pratiques
-
Toujours tester la configuration avant de recharger :
sudo nginx -t -
Utilisez des virtual hosts séparés pour chaque site
-
Activez HTTPS avec Let's Encrypt pour tous les sites
-
Surveillez les logs régulièrement pour détecter les problèmes
-
Sauvegardez vos configurations avant modification
-
Optimisez PHP-FPM selon les ressources de votre VPS
-
Mettez à jour régulièrement Nginx et PHP pour la sécurité
-
Supprimez les fichiers de test (info.php) après vérification


