Nginx propulse aujourd'hui plus de 30 % des serveurs web mondiaux grâce à sa performance et sa scalabilité. Que vous hébergiez un simple site statique, une application Node.js via un reverse proxy ou que vous optimisiez la charge d'une architecture complexe, la maîtrise de Nginx est une compétence indispensable pour tout développeur souhaitant déployer ses propres solutions avec robustesse.
Structure d'un bloc serveur
Configuration pour site statique
server {
listen 80;
server_name exemple.fr www.exemple.fr;
root /var/www/exemple.fr/public;
index index.html index.php;
# Gestion optimale des fichiers statiques
location / {
try_files $uri $uri/ =404;
}
# Pages d'erreur personnalisées
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
Reverse Proxy pour vos applications
Proxy inverse (Node.js/Python/Go)
server {
listen 80;
server_name api.exemple.fr;
location / {
proxy_pass http://127.0.0.1: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;
}
}
Sécurisation SSL/TLS avec Let's Encrypt
Configuration HTTPS sécurisée
# Redirection HTTP vers HTTPS
server {
listen 80;
server_name exemple.fr www.exemple.fr;
return 301 https://$host$request_uri;
}
# Serveur HTTPS sécurisé
server {
listen 443 ssl http2;
server_name exemple.fr;
ssl_certificate /etc/letsencrypt/live/exemple.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.fr/privkey.pem;
# Protocoles modernes
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# HSTS pour forcer la connexion sécurisée
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
root /var/www/exemple.fr/public;
}
Optimisation avec la compression Gzip
Activation de Gzip
# À placer dans http {} ou server {}
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_types
text/plain
text/css
text/javascript
application/javascript
application/json
application/xml
image/svg+xml;
En-têtes de sécurité indispensables
Headers de protection
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; add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline';" always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Optimisation du cache pour vos ressources
Stratégie de cache
# Cache agressif pour les assets statiques
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff2|woff|ttf)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
# Pas de cache pour le HTML
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-cache";
}
Limitation de débit (Rate Limiting)
Protection contre le flood
# Définir la zone de limitation (bloc http {})
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
# Application de la règle
location /api/ {
limit_req zone=api burst=20 nodelay;
limit_req_status 429;
proxy_pass http://127.0.0.1:3000;
}
Commandes essentielles
Gestion de Nginx au quotidien
# Tester la syntaxe de configuration sudo nginx -t # Recharger la configuration sans interruption sudo systemctl reload nginx # Voir les logs d'erreur en temps réel sudo tail -f /var/log/nginx/error.log # Voir les logs d'accès sudo tail -f /var/log/nginx/access.log
Découvrez nos outils développeurs
Minifiez et optimisez vos fichiers HTML, CSS et JavaScript en un clic.