LibraHostDocumentation

Documentation

Guides complets pour tous nos services d'hébergement

🌐 Installer Nginx + PHP-FPM sur un VPS#

Apprenez à installer et configurer Nginx avec PHP-FPM sur votre VPS pour créer un serveur web haute performance. Cette stack est idéale pour WordPress, Laravel, Symfony et autres applications PHP.

🎯 Objectifs#

  • ✅ Installer Nginx et PHP-FPM sur Ubuntu/Debian
  • ⚡ Optimiser la configuration pour les performances
  • 🔧 Configurer des virtual hosts pour plusieurs sites
  • 🛠️ Tester et valider l'installation
  • 🔒 Appliquer les bonnes pratiques de sécurité

🧰 Prérequis#

  • VPS sous Ubuntu 20.04+ ou Debian 11+
  • Accès root ou sudo
  • Connexion SSH active
  • Nom de domaine pointant vers votre VPS (optionnel pour les tests)

1️⃣ Préparation du système#

📦 Mise à jour du système#

# Mise à jour des paquets sudo apt update && sudo apt upgrade -y # Installation des outils essentiels sudo apt install -y curl wget gnupg2 software-properties-common

🔧 Ajout du repository PHP (pour avoir la dernière version)#

# Ajout du repository Ondrej pour PHP sudo add-apt-repository ppa:ondrej/php -y sudo apt update

2️⃣ Installation de Nginx#

📥 Installation du serveur web#

# Installation de Nginx sudo apt install nginx -y # Démarrage et activation automatique sudo systemctl start nginx sudo systemctl enable nginx # Vérification du statut sudo systemctl status nginx

🌐 Test de base#

Ouvrez votre navigateur et accédez à http://votre-ip-serveur. Vous devriez voir la page d'accueil Nginx.

# Vérifier que Nginx écoute sur le port 80 sudo netstat -tlnp | grep :80

3️⃣ Installation de PHP-FPM#

📥 Installation de PHP et extensions essentielles#

# Installation de PHP 8.2 avec FPM et extensions courantes sudo apt install -y php8.2-fpm php8.2-cli php8.2-common php8.2-mysql \ php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml \ php8.2-bcmath php8.2-intl php8.2-opcache php8.2-readline # Démarrage et activation de PHP-FPM sudo systemctl start php8.2-fpm sudo systemctl enable php8.2-fpm # Vérification du statut sudo systemctl status php8.2-fpm

4️⃣ Configuration de Nginx pour PHP#

🗂️ Structure des répertoires#

# Création de la structure pour vos sites sudo mkdir -p /var/www/html/monsite sudo chown -R www-data:www-data /var/www/html/ sudo chmod -R 755 /var/www/html/

📝 Configuration d'un site (virtual host)#

# Création du fichier de configuration sudo nano /etc/nginx/sites-available/monsite

Configuration complète :

server { listen 80; listen [::]:80; # Remplacez par votre nom de domaine server_name monsite.com www.monsite.com; # Répertoire racine du site root /var/www/html/monsite; index index.php index.html index.htm; # Logs spécifiques au site access_log /var/log/nginx/monsite_access.log; error_log /var/log/nginx/monsite_error.log; # Configuration PHP 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; } # Sécurité - bloquer l'accès aux fichiers sensibles location ~ /\.ht { deny all; } location ~ /\.git { deny all; } # Optimisation - cache des fichiers statiques location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|zip)$ { expires 1y; add_header Cache-Control "public, immutable"; } # Gestion des URLs (pour WordPress, Laravel, etc.) location / { try_files $uri $uri/ /index.php?$query_string; } }

✅ Activation du site#

# Activation du site (création du lien symbolique) sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/ # Suppression du site par défaut (optionnel) sudo rm /etc/nginx/sites-enabled/default # Test de la configuration sudo nginx -t # Rechargement de Nginx sudo systemctl reload nginx

5️⃣ Test complet de l'installation#

📄 Création d'un fichier de test PHP#

# Création d'un fichier PHP de test sudo nano /var/www/html/monsite/info.php
<?php phpinfo(); ?>

🌐 Tests dans le navigateur#

Test PHP : http://votre-domaine/info.php

⚠️ Sécurité : Supprimez le fichier info.php après les tests !

sudo rm /var/www/html/monsite/info.php

6️⃣ Optimisations et sécurité#

⚡ Configuration optimisée de Nginx#

# Édition du fichier principal de Nginx sudo nano /etc/nginx/nginx.conf

Optimisations dans la section http :

# Performance worker_processes auto; worker_connections 1024; # Compression gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json; # Sécurité server_tokens off; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; # Cache des connexions keepalive_timeout 65; keepalive_requests 100;

🔄 Application des changements#

# Redémarrage Nginx sudo systemctl restart nginx # Vérification du bon fonctionnement sudo systemctl status nginx

7️⃣ Gestion de plusieurs sites#

📁 Structure pour plusieurs sites#

# Création de répertoires pour différents sites sudo mkdir -p /var/www/html/{site1,site2,blog} sudo chown -R www-data:www-data /var/www/html/ # Création de configurations séparées sudo cp /etc/nginx/sites-available/monsite /etc/nginx/sites-available/site2 sudo nano /etc/nginx/sites-available/site2

8️⃣ Maintenance et surveillance#

📊 Commandes de surveillance#

# Statut des services sudo systemctl status nginx php8.2-fpm # Logs en temps réel sudo tail -f /var/log/nginx/error.log sudo journalctl -fu php8.2-fpm # Processus PHP-FPM actifs sudo ps aux | grep php-fpm # Connexions actives sudo netstat -an | grep :80

🔧 Commandes de gestion#

# Redémarrage sans interruption sudo systemctl reload nginx sudo systemctl reload php8.2-fpm # Test de configuration avant application sudo nginx -t sudo php-fpm8.2 -t

✅ Résumé de l'installation#

Votre serveur Nginx + PHP-FPM est maintenant opérationnel avec :

  • Nginx optimisé et sécurisé
  • PHP 8.2 avec extensions essentielles
  • PHP-FPM opérationnel
  • Virtual hosts configurés
  • Sécurité de base appliquée