Prérequis
- Un serveur Ubuntu/Debian ou AlmaLinux
- Accès root ou sudo
Nginx est un serveur web rapide et léger, idéal pour les sites à fort trafic. Combiné avec PHP-FPM, il offre d'excellentes performances pour les applications PHP comme WordPress.
1. Installer Nginx
apt update
apt install -y nginx
# Vérifier le statut
systemctl status nginx
# Tester dans le navigateur : http://VOTRE_IPdnf install -y nginx
systemctl enable --now nginx
# Ouvrir le pare-feu
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# Vérifier le statut
systemctl status nginx
# Tester dans le navigateur : http://VOTRE_IP2. Installer PHP-FPM
# Ajouter le dépôt PHP (pour les dernières versions)
apt install -y software-properties-common
add-apt-repository ppa:ondrej/php -y
apt update
# Installer PHP 8.4 FPM avec extensions
apt install -y php8.4-fpm php8.4-cli php8.4-common \
php8.4-mysql php8.4-pgsql php8.4-sqlite3 \
php8.4-curl php8.4-gd php8.4-mbstring \
php8.4-xml php8.4-zip php8.4-bcmath \
php8.4-intl php8.4-redis php8.4-imagick
# Vérifier
php -v
systemctl status php8.4-fpm# Installer EPEL et Remi
dnf install -y epel-release
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
dnf module reset php -y
dnf module enable php:remi-8.4 -y
# Installer PHP-FPM avec extensions
dnf install -y php-fpm php-cli php-common \
php-mysqlnd php-pgsql php-sqlite3 \
php-curl php-gd php-mbstring \
php-xml php-zip php-bcmath \
php-intl php-redis php-imagick
# Activer et démarrer PHP-FPM
systemctl enable --now php-fpm
# Vérifier
php -v
systemctl status php-fpm3. Configurer Nginx pour PHP
# Sauvegarder la config originale
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
# Créer la nouvelle config
cat > /etc/nginx/sites-available/default << 'EOF'
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/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
# Cache des fichiers statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
}
}
EOF# Créer la config dans conf.d
cat > /etc/nginx/conf.d/default.conf << 'EOF'
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
# Cache des fichiers statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
}
}
EOFChemin du socket PHP-FPM
Sur Ubuntu/Debian, le socket est /var/run/php/php8.4-fpm.sock. Sur AlmaLinux/Rocky Linux, le socket est /run/php-fpm/www.sock.
4. Tester et redémarrer
# Tester la configuration
nginx -t
# Redémarrer Nginx
systemctl reload nginx5. Créer une page de test PHP
echo '<?php phpinfo();' > /var/www/html/info.php
# Tester : http://VOTRE_IP/info.php
# IMPORTANT : Supprimez ce fichier après le test !
# rm /var/www/html/info.phpSécurité
Supprimez toujours info.php après le test ! Il révèle des informations sensibles sur votre serveur.
6. Créer un virtual host
cat > /etc/nginx/sites-available/monsite.com << 'EOF'
server {
listen 80;
listen [::]:80;
server_name monsite.com www.monsite.com;
root /var/www/monsite.com;
index index.php index.html;
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;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
EOF
# Créer le dossier du site
mkdir -p /var/www/monsite.com
chown -R www-data:www-data /var/www/monsite.com
# Activer le site
ln -s /etc/nginx/sites-available/monsite.com /etc/nginx/sites-enabled/
# Tester et recharger
nginx -t && systemctl reload nginxcat > /etc/nginx/conf.d/monsite.com.conf << 'EOF'
server {
listen 80;
listen [::]:80;
server_name monsite.com www.monsite.com;
root /var/www/monsite.com;
index index.php index.html;
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;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
EOF
# Créer le dossier du site
mkdir -p /var/www/monsite.com
chown -R nginx:nginx /var/www/monsite.com
# Tester et recharger
nginx -t && systemctl reload nginx7. Optimiser PHP-FPM
nano /etc/php/8.4/fpm/pool.d/www.conf
# Paramètres recommandés pour un serveur avec 4 Go de RAM :
# pm = dynamic
# pm.max_children = 50
# pm.start_servers = 10
# pm.min_spare_servers = 5
# pm.max_spare_servers = 20
# pm.max_requests = 500
# Redémarrer PHP-FPM
systemctl restart php8.4-fpmnano /etc/php-fpm.d/www.conf
# Paramètres recommandés pour un serveur avec 4 Go de RAM :
# pm = dynamic
# pm.max_children = 50
# pm.start_servers = 10
# pm.min_spare_servers = 5
# pm.max_spare_servers = 20
# pm.max_requests = 500
# Redémarrer PHP-FPM
systemctl restart php-fpm8. Configuration PHP
nano /etc/php/8.4/fpm/php.ini
# Paramètres recommandés :
# upload_max_filesize = 64M
# post_max_size = 64M
# memory_limit = 256M
# max_execution_time = 300
# max_input_vars = 3000
# date.timezone = America/Montreal
systemctl restart php8.4-fpmnano /etc/php.ini
# Paramètres recommandés :
# upload_max_filesize = 64M
# post_max_size = 64M
# memory_limit = 256M
# max_execution_time = 300
# max_input_vars = 3000
# date.timezone = America/Montreal
systemctl restart php-fpm9. SSL avec Let's Encrypt
apt install -y certbot python3-certbot-nginx
# Obtenir un certificat
certbot --nginx -d monsite.com -d www.monsite.com
# Renouvellement automatique (déjà configuré)
certbot renew --dry-rundnf install -y certbot python3-certbot-nginx
# Obtenir un certificat
certbot --nginx -d monsite.com -d www.monsite.com
# Renouvellement automatique (déjà configuré)
certbot renew --dry-runCommandes utiles
# Nginx
systemctl status nginx
systemctl reload nginx # Recharger la config
systemctl restart nginx # Redémarrer
nginx -t # Tester la config
# PHP-FPM
systemctl status php8.4-fpm
systemctl restart php8.4-fpm
# Logs
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log# Nginx
systemctl status nginx
systemctl reload nginx # Recharger la config
systemctl restart nginx # Redémarrer
nginx -t # Tester la config
# PHP-FPM
systemctl status php-fpm
systemctl restart php-fpm
# Logs
tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.logStack LEMP prête !
Votre serveur Nginx + PHP est maintenant configuré. Vous pouvez installer WordPress, Laravel ou toute autre application PHP.