Merge pull request #3313 from ywandy/feat-search-ratelimit
feat: 支持通过环境变量配置搜索接口限流参数
This commit is contained in:
@@ -177,6 +177,7 @@ var (
|
|||||||
DownloadRateLimitDuration int64 = 60
|
DownloadRateLimitDuration int64 = 60
|
||||||
|
|
||||||
// Per-user search rate limit (applies after authentication, keyed by user ID)
|
// Per-user search rate limit (applies after authentication, keyed by user ID)
|
||||||
|
SearchRateLimitEnable = true
|
||||||
SearchRateLimitNum = 10
|
SearchRateLimitNum = 10
|
||||||
SearchRateLimitDuration int64 = 60
|
SearchRateLimitDuration int64 = 60
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -120,6 +120,10 @@ func InitEnv() {
|
|||||||
CriticalRateLimitEnable = GetEnvOrDefaultBool("CRITICAL_RATE_LIMIT_ENABLE", true)
|
CriticalRateLimitEnable = GetEnvOrDefaultBool("CRITICAL_RATE_LIMIT_ENABLE", true)
|
||||||
CriticalRateLimitNum = GetEnvOrDefault("CRITICAL_RATE_LIMIT", 20)
|
CriticalRateLimitNum = GetEnvOrDefault("CRITICAL_RATE_LIMIT", 20)
|
||||||
CriticalRateLimitDuration = int64(GetEnvOrDefault("CRITICAL_RATE_LIMIT_DURATION", 20*60))
|
CriticalRateLimitDuration = int64(GetEnvOrDefault("CRITICAL_RATE_LIMIT_DURATION", 20*60))
|
||||||
|
|
||||||
|
SearchRateLimitEnable = GetEnvOrDefaultBool("SEARCH_RATE_LIMIT_ENABLE", true)
|
||||||
|
SearchRateLimitNum = GetEnvOrDefault("SEARCH_RATE_LIMIT", 10)
|
||||||
|
SearchRateLimitDuration = int64(GetEnvOrDefault("SEARCH_RATE_LIMIT_DURATION", 60))
|
||||||
initConstantEnv()
|
initConstantEnv()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -196,7 +196,10 @@ func userRedisRateLimiter(c *gin.Context, maxRequestNum int, duration int64, key
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SearchRateLimit returns a per-user rate limiter for search endpoints.
|
// SearchRateLimit returns a per-user rate limiter for search endpoints.
|
||||||
// 10 requests per 60 seconds per user (by user ID, not IP).
|
// Configurable via SEARCH_RATE_LIMIT_ENABLE / SEARCH_RATE_LIMIT / SEARCH_RATE_LIMIT_DURATION.
|
||||||
func SearchRateLimit() func(c *gin.Context) {
|
func SearchRateLimit() func(c *gin.Context) {
|
||||||
|
if !common.SearchRateLimitEnable {
|
||||||
|
return defNext
|
||||||
|
}
|
||||||
return userRateLimitFactory(common.SearchRateLimitNum, common.SearchRateLimitDuration, "SR")
|
return userRateLimitFactory(common.SearchRateLimitNum, common.SearchRateLimitDuration, "SR")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user