Sécuriser nginx
nginx est l'un des serveurs web les plus utilisés au monde. Comme il est souvent exposé directement à Internet, il représente une cible privilégiée pour les attaquants. Sécuriser correctement sa configuration est donc une étape cruciale pour protéger ses applications et ses données.
Bonnes pratiques de sécurité
Mises à jour régulières
- Maintenez nginx et l'OS à jour avec les derniers correctifs de sécurité.
- Utilisez des outils comme
unattended-upgrades(Ubuntu/Debian) pour automatiser les mises à jour critiques.
Firewall
- N'autorisez que les ports nécessaires :
- 80 (HTTP) et 443 (HTTPS).
- Bloquez les autres ports sauf si un service en dépend.
- Outils : ufw (simple) ou iptables/nftables (avancé).
HTTPS obligatoire
- Activez HTTPS avec un certificat TLS valide.
- Obtenez des certificats gratuits via Let's Encrypt avec Certbot.
-
Redirigez automatiquement HTTP → HTTPS :
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
En-têtes HTTP de sécurité
Ajoutez des en-têtes pour limiter la surface d'attaque :
add_header Content-Security-Policy "default-src 'self'" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "same-origin" always;
add_header X-Xss-Protection "1; mode=block" always;
add_header Permissions-Policy "geolocation=(), camera=(), microphone=()" always;
- CSP : limite les sources de contenu (anti-XSS).
- HSTS : impose HTTPS uniquement.
- X-Frame-Options : empêche le clickjacking.
- X-Content-Type-Options : empêche le MIME sniffing.
- Referrer-Policy : contrôle l'envoi de l'URL référente.
- X-XSS-Protection : filtre XSS (compatibilité).
- Permissions-Policy : désactive des API navigateur sensibles.
Masquer la version du serveur
Désactivez l'affichage par défaut avec :
server_tokens off;
Pour supprimer complètement l'en-tête Server, installez nginx-extras puis utilisez :
http {
more_clear_headers 'Server';
server_tokens off;
}
Limiter les méthodes HTTP
Autorisez uniquement les méthodes nécessaires (HEAD, GET et POST) :
location / {
limit_except HEAD GET POST {
deny all;
}
}
Journalisation et surveillance
- Consultez régulièrement les logs pour détecter des anomalies :
- Access logs :
/var/log/nginx/access.log - Error logs :
/var/log/nginx/error.log
- Access logs :
Tip
Les serveurs web sont une des premières cibles des attaquants !
Sur nginx, les informations de version du serveur se trouvent dans le pied de page des pages d'erreur par défaut et dans l'en-tête Server des réponses HTTP. Masquer ces informations est une bonne pratique pour limiter les informations accessibles aux attaquants.


Attention !
Les modifications dans la configuration du serveur peuvent affecter le bon fonctionnement de vos sites web.
✅ Réfléchissez à ce que vous faites !
✅ Comprenez bien chaque modification !
✅ Documentez-vous avant de changer des paramètres critiques !
✅ Notez les modifications que vous appliquez !
Liens utiles
Pour configurer les en-têtes HTTP :
Pour vérifier les en-têtes HTTP :