Configuration nginx
Tous les paramètres nginx exposés par WSA — workers, timeouts, taille du corps, rate limiting, compression, protection contre les robots.
La page Nginx Configuration expose tous les paramètres nginx ajustables au niveau du serveur. Ces réglages s'appliquent globalement à tous les comptes cPanel et tous les vhosts générés par WSA.
Accès : Barre latérale → Nginx Configuration.
💡 Les paramètres par zone de cache (Dynamic, CSS/JS, Media) ne sont pas sur cette page — voir Cache Configuration. Les paramètres Brotli détaillés (level, min length, static) se trouvent sur Nginx Build & Modules.
1. Organisation par onglets
La page est divisée en 5 onglets horizontaux :
[ All | General | Rate limiting | Compression | Bot Protection ]
| Onglet | Contenu |
|---|---|
| All | Affiche toutes les options sans filtrage. Pratique pour la recherche. |
| General | Paramètres de base d'nginx (workers, timeouts, tailles tampon). |
| Rate limiting | Limites de débit et de connexions par IP/hôte. |
| Compression | Activation gzip (Brotli sur la page Build). |
| Bot Protection | 8 catégories de blocage de robots + listes de User-Agents. |
Tous les paramètres ont :
- Validation côté client en direct — un champ invalide s'affiche en rouge avec une info-bulle expliquant le format attendu.
- Indication de la valeur par défaut —
(Default: 30s)affiché à côté du titre. - Bouton ↺ undo — visible quand la valeur diffère du défaut, restaure le défaut en un clic.
- Politique partial-save — si plusieurs champs sont modifiés et qu'un seul est invalide, les autres sont sauvegardés ; un bandeau résume les champs rejetés.
2. Onglet General

Paramètres fondamentaux du daemon nginx.
2.1 worker_connections
worker_connections (Default: 65535)
Maximum simultaneous connections per worker process.
[ 65535 ] ↺
Type : entier Défaut : 65535 Validation : nombre entier positif.
Nombre maximum de connexions simultanées qu'un seul processus worker nginx peut gérer. Multiplié par le nombre de workers (automatiquement défini par le nombre de cœurs CPU), cela donne la capacité totale de connexions du serveur.
Recommandations :
| Charge serveur | Valeur recommandée |
|---|---|
| Petit serveur (≤ 4 cœurs) | 4096 à 8192 |
| Serveur moyen (8 cœurs) | 16384 |
| Serveur dédié haute charge | 65535 (défaut) |
⚠️ Augmenter cette valeur consomme de la mémoire kernel (ulimit nofile). Si vous montez au-dessus de 65535, vérifier ulimit -n du daemon nginx.
2.2 client_body_timeout
client_body_timeout (Default: 30s)
Time nginx waits for the client to send the request body.
[ 30s ] ↺
Type : durée Défaut : 30s Validation : ^\d{1,9}s$ (entier suivi de s).
Délai d'attente entre deux lectures successives du corps de la requête client (POST, PUT). Au-delà, la connexion est fermée avec une erreur 408.
Cas d'usage spécifique :
- Uploads de gros fichiers : si vos clients uploadent des fichiers volumineux sur connexion lente, augmenter à
60sou120s. - Sites API simples :
30sest largement suffisant.
2.3 client_max_body_size
client_max_body_size (Default: 1024m)
Maximum allowed size of the client request body.
[ 1024m ] ↺
Type : taille en mégaoctets Défaut : 1024m (1 Go) Validation : ^\d{1,9}m$ (entier suivi de m).
Taille maximale d'une requête. Au-delà, nginx retourne 413 Request Entity Too Large sans transmettre la requête à Apache.
Recommandations :
| Type de site | Valeur recommandée |
|---|---|
| Sites classiques | 64m à 256m |
| Sites avec uploads d'images | 256m |
| Sites avec uploads vidéos | 1024m à 2048m |
| Plateformes de cours en ligne (vidéos longues) | 4096m+ |
⚠️ Cette valeur doit être au moins égale à la valeur configurée dans PHP (upload_max_filesize et post_max_size). Sinon nginx coupe la requête avant qu'Apache puisse traiter l'erreur PHP.
2.4 client_header_timeout
client_header_timeout (Default: 30s)
Time nginx waits for the client to send headers.
[ 30s ] ↺
Type : durée Défaut : 30s
Délai d'attente pour la réception complète des en-têtes HTTP de la requête. Très court par nature — un client légitime envoie tous ses en-têtes en quelques millisecondes.
À ne pas modifier sauf investigation d'un problème spécifique. Augmenter offre peu de bénéfice et facilite les attaques par lenteur (slowloris).
2.5 keepalive_timeout
keepalive_timeout (Default: 30s)
How long nginx keeps a client connection alive idle.
[ 30s ] ↺
Type : durée Défaut : 30s
Durée pendant laquelle une connexion TCP/HTTP keep-alive reste ouverte après la dernière requête. Permet de servir plusieurs requêtes du même client sur une seule connexion.
Trade-off :
- Valeur plus élevée (
60s+) : meilleure performance perçue (moins de poignées de main TLS), mais plus de connexions ouvertes simultanément. - Valeur plus basse (
10s) : libère des ressources plus vite mais re-handshake plus souvent.
30s est un bon équilibre pour la majorité des cas.
2.6 client_body_buffer_size
client_body_buffer_size (Default: 32k)
Memory buffer size for reading the request body.
[ 32k ] ↺
Type : taille en kilooctets Défaut : 32k Validation : ^\d{1,9}k$.
Taille du buffer mémoire utilisé pour lire le corps de la requête. Si le corps dépasse cette taille, nginx l'écrit dans un fichier temporaire (plus lent).
Cas typiques :
- Sites avec petits formulaires :
8kà32k. - API JSON qui reçoivent des payloads volumineux :
64kà256k. - Endpoints d'upload : laisser à
32k(l'upload va de toute façon sur disque temporaire).
2.7 send_timeout
send_timeout (Default: 30s)
Timeout for transmitting a response to the client.
[ 30s ] ↺
Type : durée Défaut : 30s
Délai d'attente entre deux opérations d'écriture vers le client. Si le client ne lit pas dans ce délai (connexion saturée, perte de paquets), nginx ferme.
30s couvre la majorité des cas. À augmenter uniquement pour des téléchargements très longs sur connexion lente.
3. Onglet Rate limiting

Limites de débit et de connexions pour protéger le serveur contre les abus et les attaques par déni de service.
📝 Toutes ces protections sont désactivées par défaut. Activez-les progressivement, en commençant par les valeurs recommandées, et surveillez le log nginx (
error.logau niveaunoticeou supérieur) pour les éventuels faux-positifs.
3.1 Rate limiting global serveur
3.1.1 srv_ratelimit_srv_enable
Type : toggle (On/Off) Défaut : Off
Master switch du rate limiting au niveau serveur. Quand activé, toutes les limites srvratelimit* ci-dessous s'appliquent. Quand désactivé, aucune limite n'est appliquée (les autres champs deviennent visuellement inactifs).
3.1.2 limit_req_dry_run
Type : toggle (On/Off) Défaut : Off
Mode test : logue les requêtes qui auraient été limitées sans réellement les limiter. Permet de valider la configuration sans bloquer du trafic légitime.
Recommandation : activer pendant 1 semaine après chaque changement de limite, puis désactiver une fois que les logs confirment l'absence de faux-positifs.
3.1.3 limit_req_log_level
Type : sélecteur (info, notice, warn, error) Défaut : error
Niveau de log pour les requêtes limitées. error génère beaucoup de bruit dans le log ; info plus discret.
3.1.4 srv_ratelimit_dym_only
Type : toggle (On/Off) Défaut : On
Quand On, le rate limiting ne s'applique qu'aux pages dynamiques (PHP, API, etc.). Les fichiers statiques (CSS, JS, images) passent toujours sans limite, ce qui est généralement le bon comportement — un visiteur charge 50 fichiers statiques par page mais ne déclenche pas 50 fois la limite.
À désactiver uniquement si vous protégez aussi le débit de ressources statiques (rare, par exemple anti-scraping d'images).
3.1.5 srv_ratelimit_srv_connection
Type : entier Défaut : 1000
Nombre maximum de requêtes admises par la fenêtre temporelle définie par srv_ratelimit_srv_lapse. Au-delà, les requêtes sont mises en queue (jusqu'à burst) ou rejetées.
3.1.6 srv_ratelimit_srv_lapse
Type : sélecteur (s = seconde, m = minute) Défaut : s
Unité de la fenêtre temporelle. s = par seconde, m = par minute.
Calcul : avec srv_ratelimit_srv_connection=1000 et srv_ratelimit_srv_lapse=s, la limite est 1000 requêtes/sec au niveau du serveur.
3.1.7 srv_ratelimit_srv_burst
Type : entier Défaut : 100
Tolérance temporaire : combien de requêtes au-dessus de la limite peuvent être mises en queue avant d'être rejetées.
3.1.8 srv_ratelimit_srv_burst_delay
Type : entier Défaut : 0
Combien parmi les requêtes en burst sont servies immédiatement sans délai. Les autres sont retardées artificiellement pour étaler la charge.
3.2 Rate limiting login (anti-bruteforce)
Limite spécifique pour les URI de login (/wp-login.php, /xmlrpc.php, etc.). Très ciblée, désactivée par défaut pour ne pas surprendre.
3.2.1 srv_ratelimit_login_enable
Type : toggle Défaut : Off
Active la limite spécifique anti-bruteforce sur les pages de login.
3.2.2 srv_ratelimit_login_rate
Type : entier (par minute) Défaut : 5
Nombre de tentatives par IP par minute. 5 = un visiteur ne peut pas essayer plus de 5 fois de se connecter par minute, toutes pages de login confondues.
3.2.3 srv_ratelimit_login_burst
Type : entier Défaut : 3
Tentatives supplémentaires tolérées en burst.
3.2.4 srv_ratelimit_login_uri_regex
Type : texte (regex) Défaut : ^/(wp-login\.php|xmlrpc\.php|administrator(/|$)|admin\.php|login(/|$))
Expression régulière des URI considérées comme « page de login ». Les requêtes correspondant à ce regex passent par la limite spécifique anti-bruteforce (au lieu du rate-limit général).
Personnalisation : si vous hébergez des CMS avec des URL de login non-standards (/wp-admin/auth.php, /connect/login, etc.), ajoutez-les au regex.
3.3 Limites de connexions
3.3.1 srv_limit_conn_per_ip_enable + _max
Type : toggle + entier Défaut : Off / 50
Limite le nombre de connexions simultanées par IP source. Protège contre une IP qui tenterait d'occuper tous les workers nginx pour un déni de service.
50 est généreux — la plupart des navigateurs ouvrent 4 à 8 connexions vers un même serveur.
3.3.2 srv_limit_conn_per_host_enable + _max
Type : toggle + entier Défaut : Off / 1000
Limite le nombre de connexions simultanées par domaine hébergé. Garantie de fairness multi-tenant : un site qui explose ne peut pas asphyxier les autres comptes.
1000 connexions par domaine en simultané est très large ; des valeurs entre 200 et 500 sont raisonnables pour la plupart des serveurs partagés.
⚠️ Le whitelist ne s'applique PAS à cette limite — c'est exactement ce qu'on veut empêcher : qu'un domaine sur-utilise les ressources.
3.4 srv_ratelimit_whitelist
Type : textarea (une CIDR par ligne) Défaut : vide
Liste d'adresses IP ou plages CIDR à exempter du rate limiting serveur et per-IP. Une entrée par ligne.
Exemple :
10.0.0.0/8
192.168.1.0/24
203.0.113.42
Cas d'usage typiques :
- IPs internes de votre infra (CI/CD, monitoring).
- Adresses des partenaires qui font du benchmark.
- IP statique d'un client pour le dépannage.
💡
127.0.0.1est toujours en whitelist implicite — pas besoin de l'ajouter.
4. Onglet Compression
4.1 gzip_enable
gzip_enable (Default: 1)
Enable gzip compression server-wide.
[ ON ] ↺
Type : toggle Défaut : On
Active la compression gzip pour toutes les réponses appropriées. La négociation se fait automatiquement via l'en-tête Accept-Encoding du client.
À ne désactiver que dans des cas très spécifiques : serveur sous extrême pression CPU où la compression devient un goulot, ou debug.
4.2 gzip_static_enable
gzip_static_enable (Default: 1)
Serve a pre-compressed .gz sibling if present.
[ ON ] ↺
Type : toggle Défaut : On
Quand activé, si une version .gz pré-compressée d'un fichier existe (style.css + style.css.gz), nginx la sert directement au lieu de compresser à la volée. Gain de performance pour les sites qui pré-compressent leurs assets (Webpack, gulp, scripts de build).
Aucun inconvénient — laisser activé.
📝 La configuration Brotli détaillée (level, min length, etc.) se trouve sur la page Nginx Build & Modules car elle est conditionnée à la présence du module compilé.
5. Onglet Bot Protection

8 catégories de blocage de robots indésirables au niveau nginx. Chaque catégorie est un toggle global ; les 5 premières exposent en plus une liste de User-Agents éditable (textarea). Depuis la 2.2.15, une liste blanche de proxys de confiance distincte (§5.3) fait l'inverse — elle exempte des proxys de première partie nommés (ex. le proxy d'images de Gmail) de toutes les catégories de blocage.
Pour la description fonctionnelle de chaque catégorie (à quoi sert chacune, recommandations), voir Mode avancé cPanel — onglet Bot Protection qui décrit la même structure côté utilisateur.
Côté WHM, le rôle de l'administrateur est de définir la politique par défaut serveur (les valeurs initiales que chaque client cPanel voit dans son interface) et de maintenir les listes maîtresses de User-Agents bloqués.
5.1 Toggles principaux (8 catégories)
| Champ POST | Catégorie | Défaut |
|---|---|---|
bot_protection_ai_enable |
Robots d'entraînement IA | On |
bot_protection_ai_search_enable |
IA assistants de recherche | Off |
bot_protection_ai_userinit_enable |
IA outils utilisateur | Off |
bot_protection_scanners_enable |
Scanners de vulnérabilités | On |
bot_protection_seo_enable |
Spiders SEO | Off |
bot_protection_fake_ua_enable |
User-Agents falsifiés | On |
bot_protection_strict_headers_enable |
En-têtes obligatoires | Off |
bot_protection_noagent_enable |
User-Agent vide | On |
Chaque toggle accepte 3 états en mode avancé cPanel (héritage serveur / forcé bloqué / forcé autorisé). Côté WHM ici, on définit uniquement le défaut serveur en On ou Off.
5.2 Listes éditables (5 catégories)
5 textarea pour éditer les listes maîtresses :
bot_protection_ai_listbot_protection_ai_search_listbot_protection_ai_userinit_listbot_protection_scanners_listbot_protection_seo_listbot_protection_fake_ua_list
Format : un User-Agent par ligne. Caractères autorisés : A-Z, a-z, 0-9, ., -, _, \, |, (, ), *, +, ?, espace et retour ligne. Pas de virgule (séparateur réservé).
Exemple bot_protection_ai_list
gptbot
chatgpt-user
oai-searchbot
ccbot
claude-web
claudebot
anthropic-ai
googleother
bytespider
ai2bot
imagesiftbot
mistralai-user
Bonnes pratiques :
- Ajouter les nouveaux robots IA dès qu'ils apparaissent dans les logs (regarder Show Top Offenders sur le tableau de bord).
- Garder une convention de casse cohérente (lowercase recommandé — le match est insensible à la casse).
- Tester en mode
limit_req_dry_runavant d'imposer un changement de masse.
5.3 Liste blanche de proxys de confiance (GoogleImageProxy) — depuis 2.2.15
Contrairement aux catégories de blocage ci-dessus, la liste blanche de proxys de confiance fait l'inverse : une requête dont le User-Agent correspond à une entrée est exemptée de toutes les catégories de Bot Protection (elle ne reçoit jamais de 444). Elle existe pour les proxys de première partie légitimes dont le User-Agent paraît suspect aux règles de blocage.
L'exemple livré par défaut est le proxy d'images de Gmail (GoogleImageProxy). Quand un destinataire ouvre une infolettre HTML dans Gmail, Google récupère chaque image via ce proxy avec un User-Agent ancien :
Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)
Le jeton Windows NT 5.1 correspond à la règle User-Agents falsifiés, donc sans cette liste blanche les images reçoivent un 444 et ne s'affichent pas dans Gmail.
| Champ POST | Rôle | Défaut |
|---|---|---|
bot_protection_trusted_ua_enable |
Interrupteur maître de la liste blanche | On |
bot_protection_trusted_ua_list |
Jetons de User-Agent de confiance, un par ligne | GoogleImageProxy |
Format (plus strict que les listes de blocage ci-dessus) : un jeton littéral par ligne ; caractères autorisés A-Z, a-z, 0-9, ., -, _ uniquement. La correspondance est une sous-chaîne littérale insensible à la casse — le regex n'est pas supporté ici (un . correspond à un point littéral), et les métacaractères | ( ) * + ? \, les espaces et les virgules sont rejetés à la sauvegarde. Préférez un jeton distinctif : un jeton court ou générique (ex. Bot) sur-correspond — EvilBotnet contient Bot — et laisserait passer de vrais robots.
Pour désactiver complètement la liste blanche, mettez l'interrupteur maître sur Off : aucun User-Agent ne contournera alors la Bot Protection (seul le whitelist IP du rate-limit le fait encore), tandis que la liste de jetons est conservée mais ignorée. Vider la liste seule revient au défaut livré GoogleImageProxy au lieu de la désactiver.
⚠️ Il s'agit d'un contournement de toutes les catégories de Bot Protection basé sur une chaîne User-Agent falsifiable. N'ajoutez que des jetons de proxys de confiance, et gardez chaque jeton aussi spécifique que possible.
5.4 Validation côté JS et serveur
- JS live : la textarea passe en bordure rouge si le contenu ne respecte pas le regex autorisé.
- Serveur : la validation est rejouée à la sauvegarde ; les lignes invalides sont droppées avec un avertissement listant les entrées rejetées.
6. Footer — sauvegarde
Errors are reported above; valid fields still save.
[ Cancel ] [ Save configuration ]
6.1 Bouton Save configuration
- Validation côté client de tous les champs.
- POST au dispatcher
mod-action=save-nginx-setting. - Sauvegarde partielle : les champs valides sont enregistrés même si d'autres sont invalides (les rejetés sont listés dans un bandeau jaune).
- Reconstruction nginx automatique après la sauvegarde (sortie streamée).
- Page rafraîchie avec un bandeau vert listant les options effectivement modifiées.
6.2 Bouton Cancel
Retour au tableau de bord sans appliquer les changements.
7. Pour aller plus loin
- Configuration de la cache — Paramètres par zone (Dynamic, CSS/JS, Media).
- Nginx Build & Modules — Construction du binaire nginx, HTTP/3, configuration Brotli.
- Mode avancé cPanel — Voir comment les clients overrident la politique de Bot Protection par domaine.