Préparation
- VPS avec Ubuntu 20.04/22.04/24.04 ou Debian 11/12.
- Utilisateur avec sudo, accès SSH.
- Domaine (pour HTTPS) et ports ouverts 80/443 dans le panneau du fournisseur d’accès.
Installation de Nginx et vérification rapide
sudo apt update && sudo apt -y upgrade
sudo apt -y install nginx
sudo systemctl enable --now nginx
curl -I http://127.0.0.1
Nous attendons 200 en-têtes OK. La page d’accueil Nginx se trouve généralement dans /var/www/html/.
Nous autorisons HTTP/HTTPS dans UFW et vérifions le service.
sudo systemctl status nginx --no-pager
sudo ufw allow 'Nginx Full' # Opens 80 and 443
sudo ufw enable
sudo ufw status
Si vous n’utilisez pas UFW, assurez-vous que les ports 80/443 sont ouverts dans le pare-feu cloud/panneau du fournisseur.
Créez un répertoire de site Web et une page de test.
sudo mkdir -p /var/www/example.com/html
echo 'Hello from Nginx!' | sudo tee /var/www/example.com/html/index.html
sudo chown -R $USER:$USER /var/www/example.com
Nous recommandons un répertoire distinct pour chaque domaine : /var/www/<domain>/html.
Créez un bloc serveur (configuration du site Web)
Fichier /etc/nginx/sites-available/example.com :
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
Nous activons le site web, vérifions la syntaxe et le rechargeons.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t # syntax is ok
sudo systemctl reload nginx
curl -I http://example.com
Si nginx -t affiche des erreurs, corrigez la configuration (répertoire racine, noms de domaine, parenthèses fermantes, etc.).
Gzip et en-têtes de sécurité de base
Créez le fichier /etc/nginx/conf.d/optimizations.conf :
# Gzip (standard types)
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript application/xml text/xml application/rss+xml image/svg+xml;
# Security-headings (basic)
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Content-Type-Options nosniff always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
Redémarrer la configuration :
sudo nginx -t && sudo systemctl reload nginx
Pour la production, vous devriez envisager CSP/Permissions-Policy, mais procédez par étapes afin de ne pas « négliger » le frontend.
HTTPS en 2 minutes (Let’s Encrypt)
sudo apt -y install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
# automatic renewal of certificates
systemctl status certbot.timer
Certbot écrit une redirection 301 vers HTTPS et crée une tâche pour le renouvellement automatique. Vérifiez https://example.com.
Prise en charge PHP-FPM (facultatif)
Installez FPM et connectez-le à Nginx :
sudo apt -y install php-fpm
Ajoutez le bloc suivant dans la configuration du site Web (/etc/nginx/sites-available/example.com) :
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # check the actual version
}
Nous vérifions et relisons :
sudo nginx -t && sudo systemctl reload nginx
Pour vérifier, créez le fichier /var/www/example.com/html/info.php avec <?php phpinfo(); ?>, ouvrez-le dans un navigateur, puis supprimez le fichier.
Journaux et analyse rapide des problèmes
- Erreurs : /var/log/nginx/error.log
- Accès : /var/log/nginx/access.log
- Affichage rapide des dernières lignes : sudo tail -n 200 /var/log/nginx/error.log
Vérifier les unités et les ports :
sudo systemctl status nginx
sudo ss -tulpn | grep -E ':80|:443'
Liste de contrôle avant le démarrage
- Répertoire du site créé, propriétaire/droits corrects.
- Configuration du bloc serveur enregistrée, nginx -t — OK.
- HTTP/HTTPS ouvert dans UFW/pare-feu.
- Gzip et en-têtes de sécurité de base activés.
- HTTPS émis par Let’s Encrypt, mise à jour automatique activée.
- (Si PHP est nécessaire) – PHP-FPM connecté, info.php supprimé.
En bref pour AlmaLinux/Rocky/CentOS (famille RHEL)
sudo dnf -y install nginx
sudo systemctl enable --now nginx
sudo firewall-cmd --add-service=http --add-service=https --permanent
sudo firewall-cmd --reload
# catalogs/configurations:
# root usually /usr/share/nginx/html або /var/www//html
# configs: /etc/nginx/nginx.conf and /etc/nginx/conf.d/*.conf
sudo dnf -y install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
sudo dnf -y install php-fpm
# fastcgi_pass unix:/run/php-fpm/www.sock (or your own way)