Installer Nginx et PHP-FPM sur un VPS

Ce guide pas à pas installe et configure Nginx avec PHP-FPM pour héberger des applications PHP (WordPress, Laravel, Symfony, etc.), avec durcissement de base, vhosts et HTTPS optionnel via Let's Encrypt.
Prérequis
- Accès SSH au serveur avec privilèges root ou sudo
- Un nom de domaine pointant vers l’IP du serveur (requis pour HTTPS)
- Système Debian 12 ou Ubuntu 22.04+ (commandes apt ci-dessous)
1) Mise à jour du système et installation de Nginx
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx --no-pager
Si UFW est actif, autorisez Nginx.
sudo ufw allow "Nginx Full"
sudo ufw status
2) Installer PHP 8.2 et PHP-FPM (+ extensions usuelles)
sudo apt install -y php8.2-fpm php8.2-cli php8.2-mysql php8.2-curl php8.2-xml php8.2-gd php8.2-zip php8.2-mbstring php8.2-intl
sudo systemctl enable --now php8.2-fpm
sudo systemctl status php8.2-fpm --no-pager
Astuce performances et sécurité, vérifiez ces points dans la configuration PHP.
sudo cp /etc/php/8.2/fpm/php.ini /etc/php/8.2/fpm/php.ini.bak
sudo sed -i 's/^\s*;*\s*cgi.fix_pathinfo\s*=.*/cgi.fix_pathinfo=0/' /etc/php/8.2/fpm/php.ini
sudo systemctl reload php8.2-fpm
3) Préparer l’arborescence du site et un fichier de test
Remplacez exemple.com par votre domaine.
sudo mkdir -p /var/www/exemple.com/public
sudo chown -R www-data:www-data /var/www/exemple.com
sudo find /var/www/exemple.com -type d -exec chmod 750 {} \;
sudo find /var/www/exemple.com -type f -exec chmod 640 {} \;
cat <<'PHP' | sudo tee /var/www/exemple.com/public/index.php >/dev/null
<?php phpinfo();
PHP
4) Créer un vhost Nginx pour PHP-FPM
Créez le bloc serveur.
sudo tee /etc/nginx/sites-available/exemple.com >/dev/null <<'NGINX'
server {
listen 80;
server_name exemple.com www.exemple.com;
root /var/www/exemple.com/public;
index index.php index.html;
# Routage applicatif basique
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Traitement PHP via PHP-FPM (socket Debian 12)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
# Fichiers statiques (mise en cache simple)
location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp)$ {
try_files $uri =404;
expires 7d;
access_log off;
}
}
NGINX
Activez le site et vérifiez la syntaxe.
sudo ln -s /etc/nginx/sites-available/exemple.com /etc/nginx/sites-enabled/exemple.com
sudo nginx -t
sudo systemctl reload nginx
5) Vérifier le rendu PHP
Depuis un navigateur, ouvrez http://exemple.com. Vous devez voir la page d’informations PHP. Supprimez ensuite le fichier de test.
sudo rm -f /var/www/exemple.com/public/index.php
6) Activer HTTPS avec Let’s Encrypt et Certbot (optionnel mais recommandé)
Installez Certbot et le plugin Nginx, puis demandez les certificats.
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d exemple.com -d www.exemple.com
Vérifiez le renouvellement automatique.
sudo systemctl status certbot.timer --no-pager
sudo certbot renew --dry-run
7) Durcissement de base
- Désactiver l’exécution de scripts dans les dossiers d’upload de votre application (selon le CMS)
- Limiter la taille des uploads dans PHP et Nginx si nécessaire
- Activer Fail2ban et surveiller les journaux Nginx et PHP-FPM
sudo apt install -y fail2ban
sudo journalctl -u nginx -u php8.2-fpm -f
8) Dépannage rapide
502 Bad Gateway après déploiement PHP.
sudo systemctl status php8.2-fpm --no-pager
sudo tail -n 100 /var/log/nginx/error.log
sudo tail -n 100 /var/log/php8.2-fpm.log
Erreurs de socket PHP-FPM (mauvaise version ou chemin).
ls -l /run/php/
# Adaptez fastcgi_pass si besoin, par ex. unix:/run/php/php8.3-fpm.sock
Page blanche ou téléchargement du PHP.
sudo nginx -t && sudo systemctl reload nginx
grep -R "fastcgi_pass" -n /etc/nginx
RHEL/AlmaLinux/Rocky (en bref)
sudo dnf install -y nginx php-fpm php-cli php-mysqlnd php-gd php-zip php-xml php-mbstring php-intl
sudo systemctl enable --now nginx php-fpm
# Dans /etc/php-fpm.d/www.conf, activez l’écoute socket :
# listen = /run/php-fpm/www.sock
# Puis côté Nginx :
# fastcgi_pass unix:/run/php-fpm/www.sock;
sudo systemctl reload nginx php-fpm
Résumé
- Nginx installé et démarré
- PHP-FPM 8.2 et extensions clés opérationnels
- Vhost Nginx relié à PHP-FPM via socket et testé
- HTTPS activé avec Certbot en option
- Bonnes pratiques et dépannage de base à portée de main


















