Descripcion general
Fess tiene una funcionalidad de limite de tasa para mantener la estabilidad y el rendimiento del sistema. Esta funcionalidad protege el sistema de solicitudes excesivas y permite una distribucion justa de recursos.
El limite de tasa se aplica en los siguientes escenarios:
Todas las solicitudes HTTP, incluyendo API de busqueda, API de modo IA y pantallas de administracion (
RateLimitFilter)Solicitudes del crawler (controladas por la configuracion de crawl)
Limitacion de tasa de solicitudes HTTP
Puede limitar el numero de solicitudes HTTP a Fess por direccion IP. Esta limitacion se aplica a todas las solicitudes HTTP, incluyendo la API de busqueda, la API de modo IA, las pantallas de administracion, etc.
Configuracion
app/WEB-INF/conf/fess_config.properties:
# Habilitar limite de tasa (predeterminado: false)
rate.limit.enabled=true
# Numero maximo de solicitudes por ventana (predeterminado: 100)
rate.limit.requests.per.window=100
# Tamano de ventana (milisegundos) (predeterminado: 60000)
rate.limit.window.ms=60000
Comportamiento
Las solicitudes que excedan el limite de tasa devuelven HTTP 429 (Too Many Requests)
Las solicitudes de IPs incluidas en la lista de bloqueo devuelven HTTP 403 (Forbidden)
El limite se aplica por direccion IP
La ventana se inicia con la primera solicitud de cada IP y el contador se reinicia despues de que expire el periodo de ventana (metodo de ventana fija)
Cuando se excede el limite, la IP se bloquea durante el periodo definido en
rate.limit.block.duration.ms
Limite de tasa del modo IA
La funcionalidad de modo IA tiene un limite de tasa para controlar los costos y el consumo de recursos de la API de LLM. El modo IA tiene la limitacion de tasa de solicitudes HTTP descrita anteriormente, ademas de configuraciones de limite de tasa especificas del modo IA.
Para la configuracion especifica del limite de tasa del modo IA, consulte Configuracion de la funcionalidad de modo IA.
Nota
El limite de tasa del modo IA se aplica por separado del limite de tasa del proveedor LLM. Considere ambos limites al configurar.
Limite de tasa del crawler
Puede configurar el intervalo entre solicitudes para evitar que el crawler sobrecargue los sitios objetivo.
Configuracion de crawl web
Configure lo siguiente en «Crawler» -> «Web» en la pantalla de administracion:
Intervalo de solicitudes: Tiempo de espera entre solicitudes (milisegundos)
Numero de hilos: Numero de hilos de crawl paralelos
Configuracion recomendada:
# Sitios generales
intervalTime=1000
numOfThread=1
# Sitios grandes (cuando se tiene permiso)
intervalTime=500
numOfThread=3
Respeto de robots.txt
Fess respeta por defecto la directiva Crawl-delay de robots.txt.
# Ejemplo de robots.txt
User-agent: *
Crawl-delay: 10
Todas las opciones de configuracion de limite de tasa
Todas las propiedades configurables en app/WEB-INF/conf/fess_config.properties.
| Propiedad | Descripcion | Predeterminado |
|---|---|---|
rate.limit.enabled | Habilitar limite de tasa | false |
rate.limit.requests.per.window | Numero maximo de solicitudes por ventana | 100 |
rate.limit.window.ms | Tamano de ventana (milisegundos) | 60000 |
rate.limit.block.duration.ms | Periodo de bloqueo de IP cuando se excede el limite (milisegundos) | 300000 |
rate.limit.retry.after.seconds | Valor del encabezado Retry-After (segundos) | 60 |
rate.limit.whitelist.ips | Direcciones IP excluidas del limite de tasa (separadas por comas) | 127.0.0.1,::1 |
rate.limit.blocked.ips | Direcciones IP a bloquear (separadas por comas) | (vacio) |
rate.limit.trusted.proxies | IPs de proxies confiables (para obtener X-Forwarded-For/X-Real-IP) | 127.0.0.1,::1 |
rate.limit.cleanup.interval | Intervalo de limpieza para prevenir fugas de memoria (numero de solicitudes) | 1000 |
Configuracion avanzada de limite de tasa
Limite de tasa personalizado
Para aplicar una logica de limite de tasa diferente basada en condiciones especificas, se requiere una implementacion de componente personalizado.
// Ejemplo de personalizacion de RateLimitHelper
public class CustomRateLimitHelper extends RateLimitHelper {
@Override
public boolean allowRequest(String ip) {
// Logica personalizada
}
}
Configuracion de exclusion
Puede excluir direcciones IP especificas del limite de tasa o bloquearlas.
# IPs en lista blanca (excluidas del limite de tasa, separadas por comas)
rate.limit.whitelist.ips=127.0.0.1,::1,192.168.1.100
# IPs bloqueadas (siempre bloqueadas, separadas por comas)
rate.limit.blocked.ips=203.0.113.50
# IPs de proxies confiables (separadas por comas)
rate.limit.trusted.proxies=127.0.0.1,::1
Nota
Si esta usando un proxy inverso, configure la direccion IP del proxy en rate.limit.trusted.proxies. Solo se obtendrá la IP del cliente de los encabezados X-Forwarded-For y X-Real-IP cuando la solicitud provenga de un proxy confiable.
Monitoreo y alertas
Configuracion para monitorear el estado del limite de tasa:
Salida de logs
Cuando se aplica el limite de tasa, se registra en el log:
<Logger name="org.codelibs.fess.helper.RateLimitHelper" level="INFO"/>
Solucion de problemas
Solicitudes legitimas son bloqueadas
Causa: Valor de limite demasiado estricto
Solucion:
Aumentar
rate.limit.requests.per.windowAgregar IPs especificas a la lista blanca (
rate.limit.whitelist.ips)Ajustar el tamano de la ventana (
rate.limit.window.ms)
Limite de tasa no funciona
Causa: Configuracion no reflejada correctamente
Verificaciones:
Si
rate.limit.enabled=trueesta configuradoSi el archivo de configuracion se esta leyendo correctamente
Si Fess fue reiniciado
Impacto en el rendimiento
Si la verificacion del limite de tasa afecta el rendimiento:
Utilizar la lista blanca para omitir la verificacion de IPs confiables
Deshabilitar el limite de tasa (
rate.limit.enabled=false)
Informacion de referencia
Configuracion de la funcionalidad de modo IA - Configuracion de la funcionalidad de modo IA
Rastreo Web - Guia de configuracion de crawl web
Descripción de la API - Descripcion general de API