Serveurs Dédiés & VPS10 décembre 2025 8 vues

Installer Nginx et PHP-FPM sur un VPS Linux

Installer Nginx et PHP-FPM sur un VPS Linux

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 :

  1. Entrez votre adresse email
  2. Acceptez les conditions
  3. 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 :

  1. Le fichier existe bien
  2. La directive root est correcte dans Nginx
  3. Le bloc location ~ \.php$ est présent
  4. 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

  1. Toujours tester la configuration avant de recharger : sudo nginx -t

  2. Utilisez des virtual hosts séparés pour chaque site

  3. Activez HTTPS avec Let's Encrypt pour tous les sites

  4. Surveillez les logs régulièrement pour détecter les problèmes

  5. Sauvegardez vos configurations avant modification

  6. Optimisez PHP-FPM selon les ressources de votre VPS

  7. Mettez à jour régulièrement Nginx et PHP pour la sécurité

  8. Supprimez les fichiers de test (info.php) après vérification