
Maîtriser Nginx : Installation, Configuration et Bonnes Pratiques
Maîtriser Nginx : Installation, Configuration et Bonnes Pratiques
Nginx (prononcé "Engine-X") est l'un des serveurs web les plus populaires au monde. Connu pour ses performances exceptionnelles et sa faible consommation de ressources, il est devenu un choix privilégié pour héberger des sites web à fort trafic.
Dans ce guide, nous allons explorer l'installation, la configuration et les meilleures pratiques pour exploiter pleinement Nginx.
Pourquoi Choisir Nginx ?
Nginx se distingue par plusieurs avantages majeurs :
- Performance élevée : Architecture événementielle permettant de gérer des milliers de connexions simultanées
- Faible consommation mémoire : Beaucoup plus léger que Apache dans la plupart des cas
- Reverse proxy intégré : Idéal pour la mise en place de load balancing
- Serveur de cache : Améliore significativement les temps de réponse
- Configuration simple : Syntaxe claire et facile à comprendre
Installation de Nginx
Sur Ubuntu/Debian
# Mettre à jour les paquets
sudo apt update
# Installer Nginx
sudo apt install nginx
# Vérifier l'installation
nginx -v
# Démarrer le service
sudo systemctl start nginx
# Activer au démarrage
sudo systemctl enable nginx
Sur CentOS/RHEL
# Ajouter le repository EPEL
sudo yum install epel-release
# Installer Nginx
sudo yum install nginx
# Démarrer le service
sudo systemctl start nginx
# Activer au démarrage
sudo systemctl enable nginx
Sur macOS (avec Homebrew)
# Installer Homebrew si nécessaire
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Installer Nginx
brew install nginx
# Démarrer le service
brew services start nginx
Structure de Configuration
La configuration de Nginx se trouve généralement dans /etc/nginx/. Voici la structure typique :
/etc/nginx/
├── nginx.conf # Configuration principale
├── conf.d/ # Configurations supplémentaires
├── sites-available/ # Sites disponibles (Debian/Ubuntu)
├── sites-enabled/ # Sites activés (Debian/Ubuntu)
└── ssl/ # Certificats SSL
Fichier de Configuration Principal
Le fichier nginx.conf contient la configuration globale :
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
Configuration d'un Serveur Virtuel
Un serveur virtuel permet d'héberger plusieurs sites sur un même serveur.
Configuration de Base
Créez un fichier dans /etc/nginx/sites-available/monsite.conf :
server {
listen 80;
server_name monsite.com www.monsite.com;
root /var/www/monsite;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# Logs
access_log /var/log/nginx/monsite_access.log;
error_log /var/log/nginx/monsite_error.log;
}
Activer le Site
# Créer un lien symbolique vers sites-enabled
sudo ln -s /etc/nginx/sites-available/monsite.conf /etc/nginx/sites-enabled/
# Tester la configuration
sudo nginx -t
# Recharger Nginx
sudo systemctl reload nginx
Configuration HTTPS avec SSL/TLS
Obtenir un Certificat Let's Encrypt
# Installer Certbot
sudo apt install certbot python3-certbot-nginx
# Obtenir un certificat
sudo certbot --nginx -d monsite.com -d www.monsite.com
Configuration Manuelle SSL
server {
listen 443 ssl http2;
server_name monsite.com;
ssl_certificate /etc/nginx/ssl/monsite.crt;
ssl_certificate_key /etc/nginx/ssl/monsite.key;
# Paramètres SSL recommandés
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
root /var/www/monsite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
# Redirection HTTP vers HTTPS
server {
listen 80;
server_name monsite.com;
return 301 https://$server_name$request_uri;
}
Nginx comme Reverse Proxy
Nginx excelle en tant que reverse proxy pour des applications backend.
Proxy vers une Application Node.js
server {
listen 80;
server_name api.monsite.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
Proxy vers une Application PHP-FPM
server {
listen 80;
server_name monsite.com;
root /var/www/monsite;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Load Balancing
Nginx permet de répartir la charge entre plusieurs serveurs backend.
upstream backend_servers {
least_conn;
server 192.168.1.10:80 weight=3;
server 192.168.1.11:80 weight=2;
server 192.168.1.12:80 backup;
}
server {
listen 80;
server_name monsite.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Optimisation des Performances
Activer la Compression Gzip
http {
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript
application/x-javascript application/xml application/javascript;
gzip_disable "MSIE [1-6]\.";
}
Mise en Cache du Navigateur
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
Augmenter les Limites
http {
client_max_body_size 100M;
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 16k;
}
Sécurité Nginx
Masquer la Version de Nginx
http {
server_tokens off;
}
Protéger contre les Attaques DDoS
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
}
}
}
Headers de Sécurité
server {
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;
}
Restreindre l'Accès à Certains Endpoints
location /admin {
allow 192.168.1.0/24;
deny all;
}
Commandes Utiles
# Tester la configuration
sudo nginx -t
# Recharger sans interruption
sudo systemctl reload nginx
# Redémarrer complètement
sudo systemctl restart nginx
# Vérifier le statut
sudo systemctl status nginx
# Voir les logs d'erreur
sudo tail -f /var/log/nginx/error.log
# Voir les logs d'accès
sudo tail -f /var/log/nginx/access.log
Dépannage Courant
Problème : "Permission Denied"
# Vérifier les permissions des fichiers
sudo chown -R www-data:www-data /var/www/monsite
sudo chmod -R 755 /var/www/monsite
Problème : "502 Bad Gateway"
Vérifiez que votre application backend est en cours d'exécution et accessible sur le port configuré.
Problème : Configuration Non Appliquée
# Toujours tester avant de recharger
sudo nginx -t
# Vérifier les liens symboliques
ls -la /etc/nginx/sites-enabled/
Conclusion
Nginx est un outil puissant et polyvalent qui mérite sa place dans votre stack technique. Que vous l'utilisiez comme serveur web, reverse proxy ou load balancer, une bonne compréhension de sa configuration vous permettra d'optimiser les performances et la sécurité de vos applications.
N'hésitez pas à consulter la documentation officielle pour explorer des fonctionnalités plus avancées comme le caching, le streaming ou les modules dynamiques.
Ressources Utiles :
Articles similaires

Comprendre et utiliser le protocole VNC pour l'accès à distance
Découvrez le protocole VNC pour l'accès à distance. Configuez serveur et client, et sécurisez vos connexions pour contrôler un ordinateur à distance.
Similaires

Maîtriser le transfert de fichiers sécurisé avec SCP sous Linux
Apprenez à utiliser SCP pour transférer des fichiers sécurisés entre machines. Guide complet avec exemples, options avancées et bonnes pratiques Linux.

Optimisation des requêtes SQL : Indexation et plans d'exécution
Apprenez à optimiser vos requêtes SQL grâce à l'indexation et l'analyse des plans d'exécution. Boostez les performances de votre base de données.
Similaires