Serveurs Dédiés & VPS22 janvier 2026 30 vues

Comment installer Nginx et PHP-FPM sur un VPS

Comment installer Nginx et PHP-FPM sur un VPS

Déploiement d'une Stack Web Performante : Nginx & PHP 8.2 FPM

Ce guide vous accompagne dans l'installation d'un environnement serveur robuste et sécurisé sur un VPS, idéal pour héberger des frameworks modernes comme Laravel, Symfony ou des CMS tels que WordPress.

🎯 Objectifs de la configuration

  • Serveur Web : Nginx (performances élevées pour les connexions simultanées).
  • Moteur PHP : PHP 8.2 via FPM (FastCGI Process Manager).
  • Sécurité : HTTPS via Let's Encrypt, pare-feu UFW et protection contre le brute-force.
  • Optimisation : Cache statique et gestion propre des droits d'accès.

📋 Prérequis

  • Un serveur sous Debian 12 ou Ubuntu 22.04+.
  • Accès SSH avec privilèges sudo.
  • Un nom de domaine dont l'enregistrement "A" pointe vers l'IP de votre serveur.

Étape 1 : Préparation et installation de Nginx

Commencez par rafraîchir la liste des paquets et installez le serveur web.

# Mise à jour du système
sudo apt update && sudo apt upgrade -y

# Installation et activation de Nginx
sudo apt install -y nginx
sudo systemctl enable --now nginx

Configuration du Pare-feu (UFW) : Autorisez le trafic web pour que votre site soit accessible.

sudo ufw allow "Nginx Full"

Étape 2 : Installation et optimisation de PHP 8.2

Nous installons PHP 8.2 avec les extensions essentielles pour la majorité des applications modernes.

# Installation de PHP-FPM et des modules communs
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

🔒 Sécurisation de PHP

Par défaut, PHP peut tenter d'exécuter le fichier le plus proche s'il ne trouve pas le fichier exact demandé. Désactivons ce comportement risqué :

# Désactivation de cgi.fix_pathinfo
sudo sed -i 's/^\s*;*\s*cgi.fix_pathinfo\s*=.*/cgi.fix_pathinfo=0/' /etc/php/8.2/fpm/php.ini
sudo systemctl restart php8.2-fpm

Étape 3 : Structure des fichiers et permissions

Nous allons créer un dossier dédié à votre site et appliquer des permissions restrictives mais fonctionnelles. Remplacez mon-domaine.com par votre domaine réel.

# Création de l'arborescence
sudo mkdir -p /var/www/mon-domaine.com/public

# Attribution de la propriété à l'utilisateur web (www-data)
sudo chown -R www-data:www-data /var/www/mon-domaine.com

# Sécurisation des permissions (Dossiers en 750, Fichiers en 640)
sudo find /var/www/mon-domaine.com -type d -exec chmod 750 {} \;
sudo find /var/www/mon-domaine.com -type f -exec chmod 640 {} \;

Étape 4 : Configuration du Virtual Host Nginx

Créez un fichier de configuration propre pour indiquer à Nginx comment traiter les requêtes vers votre domaine.

sudo nano /etc/nginx/sites-available/mon-domaine.com

Copiez ce bloc de configuration :

server {
    listen 80;
    server_name mon-domaine.com www.mon-domaine.com;
    root /var/www/mon-domaine.com/public;
    index index.php index.html;

    # Gestion des URLs propres (Laravel/Symfony)
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Exécution des fichiers PHP
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    # Optimisation du cache pour les fichiers statiques
    location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp)$ {
        expires 7d;
        access_log off;
        add_header Cache-Control "public";
    }

    # Interdire l'accès aux fichiers cachés (.env, .git, etc.)
    location ~ /\. {
        deny all;
    }
}

Activation du site :

sudo ln -s /etc/nginx/sites-available/mon-domaine.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Étape 5 : Sécurisation HTTPS (Certbot)

Le passage au HTTPS est indispensable aujourd'hui. Let's Encrypt permet de l'automatiser gratuitement.

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d mon-domaine.com -d www.mon-domaine.com

Étape 6 : Maintenance et Sécurité avancée

🛡️ Protection contre les attaques

Installez Fail2ban pour bannir automatiquement les IP qui tentent de forcer vos accès SSH ou web.

sudo apt install -y fail2ban

🔍 Dépannage rapide (Troubleshooting)

SymptômeCause probableAction
Erreur 502 Bad GatewayPHP-FPM est arrêté ou le socket est faux.sudo systemctl status php8.2-fpm
Erreur 403 ForbiddenMauvais droits sur les dossiers ou index manquant.Vérifier chown et le dossier /public
Page PHP téléchargéeLe bloc location ~ \.php$ est manquant.Vérifier la config Nginx et recharger.

💡 Variantes (Distributions RHEL / Rocky Linux)

Si vous êtes sur une base RedHat, utilisez dnf. Le socket PHP se trouve généralement ici : fastcgi_pass unix:/run/php-fpm/www.sock;