Übersicht
Fess enthält Rate-Limiting-Funktionen zur Aufrechterhaltung der Systemstabilität und Leistung. Diese Funktionen schützen das System vor übermäßigen Anfragen und ermöglichen eine faire Ressourcenzuteilung.
Rate-Limiting wird in folgenden Szenarien angewendet:
Alle HTTP-Anfragen einschließlich Such-API und AI-Modus-API (
RateLimitFilter)Crawler-Anfragen (Steuerung über Crawl-Konfiguration)
HTTP-Anfrage-Ratenbegrenzung
Sie können die Anzahl der HTTP-Anfragen an Fess pro IP-Adresse begrenzen. Diese Begrenzung gilt für alle HTTP-Anfragen einschließlich Such-API, AI-Modus-API, Admin-Seiten usw.
Konfiguration
app/WEB-INF/conf/fess_config.properties:
# Rate-Limiting aktivieren (Standard: false)
rate.limit.enabled=true
# Maximale Anfragen pro Fenster (Standard: 100)
rate.limit.requests.per.window=100
# Fenstergroesse (Millisekunden) (Standard: 60000)
rate.limit.window.ms=60000
Verhalten
Anfragen, die das Rate-Limit überschreiten, geben HTTP 429 (Too Many Requests) zurück
Anfragen von IPs auf der Blockliste geben HTTP 403 (Forbidden) zurück
Limits werden pro IP-Adresse angewendet
Pro IP-Adresse beginnt das Fenster mit der ersten Anfrage; nach Ablauf der Fensterperiode wird der Zähler zurückgesetzt (Festes-Fenster-Verfahren)
Bei Überschreitung wird die IP für die Dauer von
rate.limit.block.duration.msblockiert
AI-Modus Rate-Limiting
Die AI-Modus-Funktionalität verfügt über Rate-Limiting zur Kontrolle von LLM-API-Kosten und Ressourcenverbrauch. Für den AI-Modus gilt zusätzlich zur oben beschriebenen HTTP-Anfrage-Ratenbegrenzung eine eigene, AI-Modus-spezifische Ratenbegrenzung.
AI-Modus-spezifische Rate-Limiting-Einstellungen finden Sie unter AI-Modus-Funktion konfigurieren.
Bemerkung
Das AI-Modus-Rate-Limiting wird separat vom Rate-Limiting des LLM-Anbieters angewendet. Konfigurieren Sie beide Limits entsprechend.
Crawler Rate-Limiting
Sie können Anfrage-Intervalle konfigurieren, um zu verhindern, dass der Crawler Zielseiten überlastet.
Web-Crawl-Konfiguration
Konfigurieren Sie Folgendes im Admin-Panel unter „Crawler“ -> „Web“:
Anfrage-Intervall: Wartezeit zwischen Anfragen (Millisekunden)
Thread-Anzahl: Anzahl paralleler Crawling-Threads
Empfohlene Einstellungen:
# Allgemeine Seiten
intervalTime=1000
numOfThread=1
# Große Seiten (mit Genehmigung)
intervalTime=500
numOfThread=3
Beachtung von robots.txt
Fess beachtet die Crawl-delay-Direktive in robots.txt standardmäßig.
# robots.txt Beispiel
User-agent: *
Crawl-delay: 10
Alle Rate-Limiting-Einstellungen
Alle in app/WEB-INF/conf/fess_config.properties konfigurierbaren Eigenschaften.
| Eigenschaft | Beschreibung | Standard |
|---|---|---|
rate.limit.enabled | Rate-Limiting aktivieren | false |
rate.limit.requests.per.window | Maximale Anfragen pro Fenster | 100 |
rate.limit.window.ms | Fenstergroesse (Millisekunden) | 60000 |
rate.limit.block.duration.ms | IP-Blockierungsdauer bei Überschreitung (Millisekunden) | 300000 |
rate.limit.retry.after.seconds | Retry-After-Header-Wert (Sekunden) | 60 |
rate.limit.whitelist.ips | Vom Rate-Limiting ausgeschlossene IP-Adressen (kommagetrennt) | 127.0.0.1,::1 |
rate.limit.blocked.ips | Blockierte IP-Adressen (kommagetrennt) | (leer) |
rate.limit.trusted.proxies | Vertrauenswürdige Proxy-IPs (für X-Forwarded-For/X-Real-IP) | 127.0.0.1,::1 |
rate.limit.cleanup.interval | Bereinigungsintervall zur Vermeidung von Speicherlecks (Anfragenzahl) | 1000 |
Erweiterte Rate-Limiting-Konfiguration
Benutzerdefiniertes Rate-Limiting
Um verschiedene Rate-Limiting-Logik basierend auf bestimmten Bedingungen anzuwenden, ist eine benutzerdefinierte Komponentenimplementierung erforderlich.
// Beispiel für benutzerdefinierten RateLimitHelper
public class CustomRateLimitHelper extends RateLimitHelper {
@Override
public boolean allowRequest(String ip) {
// Benutzerdefinierte Logik
}
}
Ausschluss-Einstellungen
Sie können bestimmte IP-Adressen vom Rate-Limiting ausschließen oder blockieren.
# Whitelist-IPs (vom Rate-Limiting ausgeschlossen, kommagetrennt)
rate.limit.whitelist.ips=127.0.0.1,::1,192.168.1.100
# Blockierte IPs (immer blockiert, kommagetrennt)
rate.limit.blocked.ips=203.0.113.50
# Vertrauenswürdige Proxy-IPs (kommagetrennt)
rate.limit.trusted.proxies=127.0.0.1,::1
Bemerkung
Bei Verwendung eines Reverse-Proxys setzen Sie rate.limit.trusted.proxies auf die IP-Adresse des Proxys. Nur bei Anfragen von vertrauenswürdigen Proxys wird die Client-IP aus den X-Forwarded-For- und X-Real-IP-Headern ermittelt.
Überwachung und Warnungen
Konfiguration zur Überwachung des Rate-Limiting-Status:
Protokollausgabe
Wenn Rate-Limiting angewendet wird, wird es in den Protokollen aufgezeichnet:
<Logger name="org.codelibs.fess.helper.RateLimitHelper" level="INFO"/>
Fehlerbehebung
Legitime Anfragen werden blockiert
Ursache: Grenzwerte sind zu streng
Lösungen:
rate.limit.requests.per.windowerhöhenBestimmte IPs zur Whitelist hinzufügen (
rate.limit.whitelist.ips)Fenstergroesse (
rate.limit.window.ms) anpassen
Rate-Limiting funktioniert nicht
Ursache: Konfiguration wird nicht richtig angewendet
Prüfen:
Ist
rate.limit.enabled=truekonfiguriert?Wird die Konfigurationsdatei korrekt gelesen?
Wurde Fess neu gestartet?
Leistungsauswirkung
Wenn die Rate-Limiting-Prüfungen selbst die Leistung beeinträchtigen:
Whitelist nutzen, um Prüfungen für vertrauenswürdige IPs zu überspringen
Rate-Limiting deaktivieren (
rate.limit.enabled=false)
Referenzinformationen
AI-Modus-Funktion konfigurieren - AI-Modus-Konfiguration
Web-Crawl - Web-Crawl-Konfigurationsleitfaden
API-Übersicht - API-Übersicht