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