doganddev
Accueil Blog Boutique

Nginx et PHP-FPM sur Linux

DOG&DEV · 25/01/2025

Automatisation Emails & Messagerie Linux Nginx
Nginx et PHP-FPM sur Linux

Nginx et PHP-FPM sur Linux

Nginx et PHP-FPM forment une stack courante pour servir des sites PHP (WordPress, Laravel, etc.) avec de bonnes performances. Ce guide décrit l’installation sur Debian/Ubuntu, la configuration d’un pool PHP-FPM et d’un bloc server Nginx avec fastcgi_pass.

Prérequis

  • Debian 11/12 ou Ubuntu 20.04/22.04
  • Accès root ou sudo
  • Connexion Internet

Installation

sudo apt update
sudo apt install nginx php-fpm

Choisir la version de PHP souhaitée (ex. 8.2) :

sudo apt install php8.2-fpm

Extensions courantes pour PHP :

sudo apt install php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl php8.2-zip php8.2-gd

Démarrer et activer les services

sudo systemctl enable nginx php8.2-fpm
sudo systemctl start nginx php8.2-fpm
sudo systemctl status nginx php8.2-fpm

Configuration de PHP-FPM (pool)

Fichier type : /etc/php/8.2/fpm/pool.d/www.conf (ou www.conf dans le répertoire de votre version).

  • user et group : l’utilisateur sous lequel tourne PHP (souvent www-data).
  • listen : listen = /run/php/php8.2-fpm.sock (socket) ou listen = 127.0.0.1:9000 (TCP).

Pour un site dédié, on peut créer un pool séparé (ex. monapp.conf) :

[monapp]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm-monapp.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Puis :

sudo systemctl restart php8.2-fpm

Configuration Nginx : bloc server

Exemple pour un site PHP (document root /var/www/html ou /var/www/monsite) :

server {
    listen 80;
    server_name monsite.com www.monsite.com;
    root /var/www/monsite;

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    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;
    }

    location ~ /\.ht {
        deny all;
    }
}
  • fastcgi_pass :

    • socket : unix:/run/php/php8.2-fpm.sock
    • TCP : 127.0.0.1:9000
  • Pour Laravel : root pointe vers le dossier public du projet et try_files envoie tout vers index.php :

root /var/www/monsite/public;
try_files $uri $uri/ /index.php?$query_string;

Placez la config dans /etc/nginx/sites-available/monsite, activez le site et rechargez Nginx :

sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Vérification

  • Créer un info.php dans la racine : <?php phpinfo(); ?> (à supprimer ensuite).
  • Ouvrir http://IP_ou_domaine/info.php : la page PHP doit s’afficher.

Dépannage

Symptôme Cause possible Correctif
502 Bad Gateway PHP-FPM arrêté, mauvais fastcgi_pass (socket/port) systemctl status php8.2-fpm ; vérifier le chemin du socket ou le port dans la config Nginx
404 sur les routes (Laravel, etc.) try_files ou root incorrect root vers public/ ; try_files ... /index.php?$query_string
Fichiers PHP téléchargés fastcgi_pass non pris en compte pour \.php$ Vérifier le location ~ \.php$ et que Nginx a bien été rechargé

Bonnes pratiques

  • Ne pas exposer phpinfo() en production.
  • Ajuster pm (PHP-FPM) selon la RAM et la charge.
  • Utiliser HTTPS (Let’s Encrypt, reverse proxy) en production.
  • Pour WordPress : wordpress-debian13 ; pour Laravel sur un panel : laravel-plesk-website ; pour Froxlor : froxlor-linux.

Ressources


Cet article s’inscrit dans notre série de guides hébergement et gaming. Pour un serveur sur-mesure, contact.

Commentaires (0)

Laisser un commentaire