Astral 360 WSA — Accélérateur de sites

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

Onglet General — worker_connections, timeouts, taille du body

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 à 60s ou 120s.
  • Sites API simples : 30s est 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

Onglet Rate limiting — limites serveur, login, et connexions

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.log au niveau notice ou 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.1 est 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

Onglet Bot Protection — 8 catégories avec toggles et listes de User-Agents éditables

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_list
  • bot_protection_ai_search_list
  • bot_protection_ai_userinit_list
  • bot_protection_scanners_list
  • bot_protection_seo_list
  • bot_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_run avant 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.

   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