Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsUn serveur NGINX correctement durci repose sur plusieurs contrôles qui se renforcent mutuellement : connaître exactement le binaire installé, configurer HTTPS sans casser les clients nécessaires, protéger les clés privées, réduire les informations divulguées, limiter les méthodes et les requêtes, traiter explicitement les hôtes inconnus, puis tester et surveiller chaque changement. Les exemples ci-dessous sont des points de départ à adapter à votre version, vos modules, votre application et votre architecture de proxy.
Commencez par inventorier NGINX
Avant de modifier un fichier, relevez la version, les options de compilation, les modules chargés et le rôle de NGINX. Un frontal qui termine TLS, un proxy inverse et un serveur de fichiers n’ont pas les mêmes risques ni les mêmes règles d’accès.
- Identifiez le chemin du binaire et vérifiez sa version avec l’option fournie par votre paquet.
- Examinez les paramètres de compilation et les modules dynamiques. Une directive n’est disponible que si le module correspondant existe dans ce binaire.
- Notez les fichiers réellement inclus par la configuration et les comptes système qui lancent le processus maître et les workers.
- Vérifiez régulièrement les versions de NGINX et des modules, notamment njs. L’historique officiel comporte, au 2 septembre 2026, un avis sur un contournement de contrôle d’accès
js_accessdans des versions affectées : cet avis ne permet pas, à lui seul, de conclure que votre installation est vulnérable.
Traitez tout exemple trouvé en ligne comme une hypothèse à valider. Les valeurs par défaut de TLS et certaines directives ont changé au fil des versions.
Protégez HTTPS, les certificats et les clés
Activez uniquement les protocoles compatibles avec votre politique
La documentation NGINX indique aujourd’hui TLS 1.2 et TLS 1.3 parmi les valeurs par défaut documentées, avec la suite HIGH:!aNULL:!MD5, tout en précisant que ces valeurs ont évolué. Vérifiez donc votre version et les clients à supporter avant de figer une politique. N’ajoutez pas de protocoles anciens uniquement parce qu’un modèle de configuration les contient.
#1 Best Overall
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/tls/example.com.fullchain.pem;
ssl_certificate_key /etc/nginx/tls/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
# Adaptez la politique cryptographique à votre version et à vos clients.
ssl_ciphers HIGH:!aNULL:!MD5;
}
Gardez la clé privée lisible uniquement par le processus maître
La clé privée doit être un secret, avec des permissions restreintes, mais elle doit rester lisible par le processus maître NGINX. Évitez de la placer dans un répertoire accessible aux utilisateurs non privilégiés, dans un dépôt Git ou dans des sauvegardes non chiffrées. Vérifiez aussi les permissions du répertoire parent et le propriétaire effectif après chaque renouvellement de certificat.
N’activez pas prématurément TLS early data
ssl_early_data est désactivé par défaut. Les requêtes en early data peuvent être rejouées : ne l’activez que si l’application rend les opérations concernées résistantes au rejeu et si vous avez défini quelles routes sont sûres.
Réduisez les informations exposées
server_tokens contrôle la présence de la version NGINX dans les pages d’erreur et l’en-tête Server. Le désactiver réduit un indice utile à un attaquant, mais ne remplace ni les mises à jour, ni l’isolation, ni l’authentification.
http {
server_tokens off;
}
Inspectez également les en-têtes ajoutés par l’application, les pages d’erreur personnalisées, les index de répertoire et les fichiers de sauvegarde accidentellement servis. Ne masquez pas une version en pensant avoir corrigé une vulnérabilité : le comportement et le correctif restent prioritaires.
Limitez les méthodes et les adresses autorisées
Autorisez seulement les méthodes nécessaires
Une API qui lit des données n’a pas besoin d’accepter PUT, PATCH ou DELETE sur chaque route. Utilisez limit_except dans le contexte approprié et testez les routes qui doivent réellement accepter une écriture.
Rank #2
location /api/ {
limit_except GET HEAD {
deny all;
}
proxy_pass http://backend;
}
Adaptez cet exemple aux besoins de l’application : bloquer une méthode utilisée par un formulaire ou un webhook provoque une panne fonctionnelle, pas un durcissement réussi.
Souvenez-vous de l’ordre allow/deny
NGINX examine les directives allow et deny séquentiellement jusqu’à la première correspondance. L’ordre modifie donc le résultat.
location /admin/ {
allow 203.0.113.10;
deny all;
proxy_pass http://admin_backend;
}
Si NGINX est derrière un équilibreur ou un CDN, vérifiez d’abord quelle adresse il considère comme celle du client. Une règle basée sur une adresse de proxy au lieu de celle de l’utilisateur peut autoriser tout le trafic ou le refuser entièrement.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Limitez les requêtes sans bloquer le trafic légitime
Le module ngx_http_limit_req_module applique une limite par clé au moyen d’un mécanisme de type seau percé. L’exemple suivant crée une zone partagée par adresse binaire et autorise une marge de rafale ; les nombres sont illustratifs, pas un débit universel recommandé.
http {
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=5r/s;
server {
location /login {
limit_req zone=per_ip burst=10;
proxy_pass http://backend;
}
}
}
Mesurez le trafic normal, les pics légitimes et les réponses du backend avant de choisir le taux et la rafale. Une limite par IP est inadaptée si de nombreux utilisateurs partagent une adresse NAT. À l’inverse, faire confiance à un en-tête d’adresse transmis par un proxy non vérifié permet de le falsifier. Configurez la chaîne de proxies et la clé de limitation selon votre architecture réelle, que les sources disponibles ne permettent pas de prescrire pour un fournisseur donné.
Rank #3
Traitez explicitement les hôtes inconnus
NGINX sélectionne le serveur virtuel HTTP à partir de Host. Si aucun nom ne correspond, ou si l’en-tête manque, la requête arrive au serveur par défaut du port. Désignez ce serveur explicitement et choisissez un comportement qui ne révèle pas votre application.
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
Selon vos besoins, le serveur par défaut peut renvoyer une réponse minimale, fermer la connexion ou rediriger vers une page neutre. Testez les noms valides, un nom aléatoire et une requête sans Host (si votre outil de test le permet).
Recommended Free Tools
Appliquez les changements avec contrôle et retour arrière
- Copiez la configuration actuelle et notez la version du paquet avant modification.
- Éditez un fichier séparé ou un fragment inclus plutôt que de réécrire toute la configuration.
- Utilisez la commande de validation fournie par votre binaire et votre distribution avant de recharger. La documentation consultée ne prescrit pas une commande identique pour toutes les installations : confirmez le chemin et les options locales.
- Déployez d’abord sur un hôte ou un pourcentage limité du trafic lorsque c’est possible.
- Envoyez un rechargement HUP après validation. NGINX démarre de nouveaux workers avec la nouvelle configuration puis arrête progressivement les anciens.
- Surveillez les journaux d’erreur, les codes 4xx/5xx, les temps de réponse et les connexions TLS. Conservez le fragment précédent pour un retour arrière rapide.
Un rechargement réussi ne garantit pas que l’application fonctionne : une directive peut être syntaxiquement valide tout en refusant un webhook, en envoyant le mauvais hôte au backend ou en supprimant une méthode requise.
Vérifications après durcissement
- Ouvrez le site avec les noms de domaine attendus et confirmez la chaîne de certificat.
- Vérifiez les versions TLS réellement négociées avec un client représentatif.
- Envoyez des requêtes avec chaque méthode et assurez-vous que seules celles prévues passent.
- Testez les adresses autorisées et refusées depuis des réseaux distincts.
- Envoyez des rafales contrôlées vers les routes limitées et observez le comportement du backend.
- Essayez un
Hostinconnu et contrôlez qu’aucun contenu sensible n’est renvoyé. - Contrôlez que les pages d’erreur et l’en-tête
Serverne divulguent pas la version si vous avez désactivéserver_tokens.
Dépannage des erreurs courantes
NGINX refuse de démarrer après une modification
Cause fréquente : faute de syntaxe, fichier inclus absent ou directive fournie par un module non compilé. Revenez au dernier fragment modifié, exécutez la validation locale et consultez le journal d’erreur avant tout nouveau rechargement.
Le certificat fonctionne, mais certains clients échouent
Vérifiez la version TLS négociée, la chaîne complète fournie et les exigences de compatibilité. Ne réactivez pas globalement des protocoles anciens sans décision documentée : isolez plutôt le client obsolète ou planifiez son remplacement.
Rank #4
Les utilisateurs légitimes reçoivent trop de 429
Le taux, la rafale ou la clé sont probablement inadaptés. Comparez les journaux avec le trafic normal, tenez compte des réseaux partagés et confirmez l’adresse vue par NGINX derrière les proxies.
Une adresse autorisée reste bloquée
Contrôlez l’ordre exact des règles, l’héritage entre contextes et l’adresse réellement évaluée. La première correspondance gagne : une directive plus générale placée avant votre exception peut expliquer le résultat.
Le mauvais site répond à un nom inattendu
Vérifiez le server_name, le port d’écoute et le serveur default_server. Ajoutez un test automatisé pour les noms inconnus afin d’éviter une régression lors d’un prochain rechargement.
Or skip the browser setup
Pour vérifier visuellement vos pages après un changement NGINX, vous pouvez utiliser ScreenshotNeo, une API de capture et un serveur MCP pour développeurs. Il accepte la bannière de consentement avant la capture et retire plus de 60 plateformes de consentement connues, les popups de newsletter et les widgets de chat. Les contrôles peuvent être désactivés individuellement. Les contrôles anti-bot/CAPTCHAs, pages blanches, expirations, échecs de chargement et résultats servis du cache ne sont pas facturés ; chaque réponse indique le verdict de page et l’état de facturation dans les en-têtes.
Un appel GET suffit (consultez la documentation ScreenshotNeo) :
Best Value
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Équivalents Python et Node.js :
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
ScreenshotNeo propose aussi capture pleine page avec chargement des images paresseuses, sélection d’un élément CSS, appareils et affichage sombre, échelle Retina, PDF, CSS/JavaScript personnalisés, clics, masquage de sélecteurs, attentes, blocage de ressources, en-têtes/cookies, géolocalisation, redimensionnement, cache à TTL, liens signés, tâches asynchrones avec webhooks, appels groupés jusqu’à 100 URL et API d’usage. Son serveur MCP expose take_screenshot, get_page_info et capture_pdf aux clients MCP tels que Claude ou Cursor. Le forfait gratuit comprend 1 000 captures mensuelles sans carte ; les forfaits payants commencent à 5 $ pour 3 000 captures. Créer un compte ScreenshotNeo gratuitement.
Frequently Asked Questions
Faut-il désactiver TLS 1.0 et TLS 1.1 partout ?
La politique dépend des clients que vous devez encore prendre en charge et de votre version NGINX. Vérifiez ces exigences avant de fixer les protocoles, puis retirez les versions anciennes lorsque la compatibilité le permet.
Une limitation par adresse IP protège-t-elle toute une API ?
Non. Elle ne voit qu’une clé déterminée par votre configuration. Choisissez la clé, le taux et la rafale selon les routes, l’authentification, les proxies et le trafic réel.
Le rechargement HUP coupe-t-il les connexions existantes ?
NGINX lance de nouveaux workers et arrête progressivement les anciens. Surveillez néanmoins les journaux et prévoyez un retour arrière, car une configuration valide peut encore provoquer une erreur applicative.
Free tools Windows power users keep installed
One-click scans. No signup required.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

