## 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 /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