Aperçu
Fess dispose d’une fonctionnalité de limitation de débit pour maintenir la stabilité et les performances du système. Cette fonctionnalité protège le système contre les requêtes excessives et permet une allocation équitable des ressources.
La limitation de débit s’applique dans les situations suivantes :
Toutes les requêtes HTTP, y compris l’API de recherche, l’API de mode de recherche IA et les pages d’administration (
RateLimitFilter)Requêtes du crawler (contrôlées par la configuration du crawl)
Limitation de débit des requêtes HTTP
Vous pouvez limiter le nombre de requêtes HTTP vers Fess par adresse IP. Cette limitation s’applique à toutes les requêtes HTTP, y compris l’API de recherche, l’API de mode de recherche IA, les pages d’administration, etc.
Configuration
app/WEB-INF/classes/fess_config.properties :
Comportement
Les requêtes dépassant la limite de débit retournent HTTP 429 (Too Many Requests)
Les requêtes provenant d’IP bloquées pour dépassement de la limite ou figurant dans la liste de blocage retournent HTTP 403 (Forbidden)
Le corps de la réponse est du JSON (429 :
{"error":"rate_limit_exceeded",...,"retry_after":60}; 403 :{"error":"ip_blocked",...}). La réponse 429 comporte l’en-têteRetry-AfterLes limites sont appliquées par adresse IP
Pour chaque IP, la fenêtre commence au premier requête et le compteur est réinitialisé après l’expiration de la période de la fenêtre (méthode de fenêtre fixe)
Le dépassement de la limite entraîne le blocage de l’IP pendant la durée
rate.limit.block.duration.ms
Limitation de débit du mode de recherche IA
La fonctionnalité de mode de recherche IA dispose d’une limitation de débit pour contrôler les coûts de l’API LLM et la consommation de ressources. Le mode de recherche IA est soumis à la limitation de débit des requêtes HTTP décrite ci-dessus, et dispose également de paramètres de limitation de débit spécifiques au mode de recherche IA.
Pour la configuration spécifique de la limitation de débit du mode de recherche IA, consultez Configuration du mode de recherche IA.
Note
La limitation de débit du mode de recherche IA s’applique séparément de la limitation de débit côté fournisseur LLM. Configurez en tenant compte des deux limites.
Limitation de débit du crawler
Vous pouvez configurer l’intervalle entre les requêtes pour éviter que le crawler ne surcharge les sites cibles.
Configuration du crawl Web
Configurez les éléments suivants dans l’écran d’administration « Crawler » -> « Web » :
Intervalle de requêtes : Temps d’attente entre les requêtes (millisecondes)
Nombre de threads : Nombre de threads de crawl parallèles
Configuration recommandée :
Respect de robots.txt
Fess respecte par défaut la directive Crawl-delay de robots.txt.
Le traitement de robots.txt est contrôlé par crawler.ignore.robots.txt dans app/WEB-INF/classes/fess_config.properties (défaut : false). En le définissant sur true, le traitement de robots.txt, y compris Crawl-delay, est désactivé.
Crawl-delay s’applique par origine et est plafonné à 60 secondes. Il espace les URL, pas les requêtes : lors d’un crawl incrémental, le HEAD et le GET d’une même URL partent donc l’un après l’autre. L’intervalle d’une configuration de crawl agit toujours séparément, comme attente avant l’URL suivante.
robots.txt est interprété selon la RFC 9309. Entre Allow: et Disallow:, la règle correspondante la plus longue l’emporte, et les URL de départ sont elles aussi vérifiées. Une URL interdite par robots.txt est journalisée au niveau INFO dans fess-crawler.log et n’est pas enregistrée comme URL en échec.
Attente après les réponses 429/503
Quand un serveur répond 429 Too Many Requests ou 503 Service Unavailable, Fess suspend les requêtes vers cette origine et réessaie l’URL jusqu’à trois fois. L’attente est la valeur de l’en-tête Retry-After s’il est présent, sinon une attente exponentielle qui commence à 10 secondes (5 minutes au plus). Si la dernière tentative échoue aussi, un WARN est écrit dans fess-crawler.log.
Quand robots.txt ne peut pas être récupéré
Quand la récupération de robots.txt échoue avec un 5xx, un 429 ou un délai dépassé, les URL de cette origine sont remises dans la file jusqu’à la fin de l’attente. Si trois nouvelles tentatives échouent après le premier échec, aucune URL de cette origine n’est crawlée jusqu’à la fin du crawl, et un seul WARN est écrit dans fess-crawler.log. Jusqu’à la version 15.8, un robots.txt impossible à récupérer valait « tout autoriser ». Pour retrouver ce comportement, indiquez ceci dans les « Paramètres de configuration » de la configuration de crawl web :
Pour désactiver entièrement le traitement de robots.txt, utilisez client.robotsTxtEnabled=false (par configuration de crawl) ou crawler.ignore.robots.txt=true.
Liste complète des propriétés de limitation de débit
Toutes les propriétés configurables dans app/WEB-INF/classes/fess_config.properties.
| Propriété | Description | Valeur par défaut |
|---|---|---|
rate.limit.enabled | Activer la limitation de débit | false |
rate.limit.requests.per.window | Nombre maximum de requêtes par fenêtre | 100 |
rate.limit.window.ms | Taille de la fenêtre (millisecondes) | 60000 |
rate.limit.block.duration.ms | Durée de blocage de l’IP en cas de dépassement (millisecondes) | 300000 |
rate.limit.retry.after.seconds | Valeur de l’en-tête Retry-After (secondes) | 60 |
rate.limit.whitelist.ips | Adresses IP exclues de la limitation de débit (séparées par des virgules) | 127.0.0.1,::1 |
rate.limit.blocked.ips | Adresses IP à bloquer (séparées par des virgules) | (vide) |
rate.limit.trusted.proxies | IP de proxies de confiance (pour obtenir l’IP client via X-Forwarded-For/X-Real-IP) | 127.0.0.1,::1 |
rate.limit.cleanup.interval | Intervalle de nettoyage (nombre de requêtes, réservé) | 1000 |
Note
rate.limit.cleanup.interval est un paramètre réservé pour une utilisation future. Dans l’implémentation actuelle, les compteurs de requêtes et les informations sur les IP bloquées sont nettoyés automatiquement en fonction de l’expiration du cache interne (rate.limit.window.ms et rate.limit.block.duration.ms), de sorte que cette valeur n’est pas utilisée.
Configuration avancée de limitation de débit
Limitation de débit personnalisée
Pour appliquer des limites différentes selon des conditions spécifiques, une implémentation de composant personnalisé est nécessaire.
Configuration d’exclusion
Vous pouvez exclure certaines adresses IP de la limitation de débit ou les bloquer.
Note
Si vous utilisez un reverse proxy, configurez l’adresse IP du proxy dans rate.limit.trusted.proxies. Seules les requêtes provenant de proxies de confiance permettent d’obtenir l’IP client via les en-têtes X-Forwarded-For et X-Real-IP.
Surveillance et alertes
Configuration pour surveiller l’état de la limitation de débit :
Sortie de logs
Lorsque la limitation de débit est appliquée, elle est enregistrée dans les logs :
Le message est enregistré au niveau INFO ; il n’est donc pas écrit avec le niveau de log par défaut (warn). Ajoutez le Logger ci-dessus à log4j2.xml (emplacement : voir Configuration des journaux) ou définissez FESS_LOG_LEVEL à info.
Dépannage
Les requêtes légitimes sont bloquées
Cause : Les valeurs limites sont trop strictes
Solution :
Augmenter
rate.limit.requests.per.windowAjouter des IP spécifiques à la liste blanche (
rate.limit.whitelist.ips)Ajuster la taille de la fenêtre (
rate.limit.window.ms)
La limitation de débit ne fonctionne pas
Cause : La configuration n’est pas correctement appliquée
Points à vérifier :
Vérifier si
rate.limit.enabled=trueest configuréVérifier si le fichier de configuration est correctement lu
Vérifier si Fess a été redémarré
Impact sur les performances
Si la vérification de la limitation de débit affecte les performances :
Utiliser la liste blanche pour ignorer les vérifications sur les IP de confiance
Désactiver la limitation de débit (
rate.limit.enabled=false)
Informations de référence
Configuration du mode de recherche IA - Configuration de la fonctionnalité de mode de recherche IA
Crawl Web (recherche de site Web) - Guide de configuration du crawl Web
Vue d’ensemble de l’API - Aperçu des API