속도 미들웨어는 Iris 웹 프레임워크에 속도 제한 기능을 제공합니다. 이를 통해 개발자는 애플리케이션에 대한 요청 비율을 제어하여 공정한 사용을 보장하고 남용을 방지할 수 있습니다. 미들웨어는 속도 제한에 널리 사용되는 방법인 토큰 버킷 알고리즘을 기반으로 합니다.
rate 미들웨어를 사용하려면 Iris 애플리케이션에서 이를 가져와야 합니다.
import "github.com/kataras/iris/v12/middleware/rate"
Rate Limiter를 사용하려면 Iris 애플리케이션을 만들고 미들웨어를 등록해야 합니다. 다음은 속도 제한기를 설정하는 방법의 예입니다.
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") limit := rate.Limit(1, 5, rate.PurgeEvery(time.Minute, 5*time.Minute)) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
이 예에서는 최대 버스트 크기가 5인 초당 1개의 요청을 허용합니다. 또한 5분 동안 표시되지 않은 오래된 항목은 1분마다 삭제됩니다.
이 예는 비율을 사용하는 방법을 보여줍니다. 모든 도우미는 비율 제한기를 설정합니다.
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Use rate.Every helper to set up the rate limiter. limit := rate.Limit(rate.Every(time.Minute), 5) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
이 예에서는 클라이언트의 원격 IP 주소 대신 API 키를 사용하는 속도 제한기를 설정하는 방법을 보여줍니다.
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Use API key for rate limiting. app.Use(useAPIKey) limit := rate.Limit(rate.Every(time.Minute), 300, rate.PurgeEvery(5*time.Minute, 15*time.Minute)) app.Use(limit) app.Get("/list", list) app.Listen(":8080") } func useAPIKey(ctx iris.Context) { apiKey := ctx.Header("X-API-Key") if apiKey == "" { ctx.StopWithStatus(iris.StatusForbidden) return } rate.SetIdentifier(ctx, apiKey) ctx.Next() } func list(ctx iris.Context) { ctx.JSON(iris.Map{"key": "value"}) }
이 예에서는 비율 제한이 초과될 때 실행될 사용자 정의 핸들러를 설정하는 방법을 보여줍니다.
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Set a custom exceed handler. limit := rate.Limit(1, 5, rate.ExceedHandler(func(ctx iris.Context) { ctx.StopWithStatus(429) })) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
이 예에서는 각 클라이언트에 대한 사용자 정의 데이터를 저장하는 방법을 보여줍니다.
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Store custom data for each client. limit := rate.Limit(1, 5, rate.ClientData(func(ctx iris.Context) any { return ctx.RemoteAddr() })) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
속도 제한: rate.Limit 함수는 새로운 속도 제한기를 생성하는 데 사용됩니다. 세 가지 매개변수가 필요합니다:
토큰 버킷 알고리즘: 이 알고리즘은 토큰 버킷을 유지하여 요청 속도를 제어합니다. 각 요청은 토큰을 소비하며 토큰은 고정된 속도로 버킷에 추가됩니다. 버킷이 비어 있으면 요청이 거부됩니다.
토큰 버킷 알고리즘은 요청 비율을 제어하는 간단하고 효율적인 방법입니다. 다음과 같이 작동합니다:
자세한 내용은 토큰 버킷에 대한 위키피디아 글을 참고하세요.
이 미들웨어는 Iris 애플리케이션에서 속도 제한을 구현하는 강력하고 유연한 방법을 제공합니다. 토큰 버킷 알고리즘을 사용하면 공정한 사용을 보장하고 남용을 방지하여 애플리케이션을 더욱 안정적이고 안전하게 만들 수 있습니다.
더 많은 예시와 자세한 사용법은 Iris 공식 문서를 참고하세요.
위 내용은 Iris용 요청 속도 제한 미들웨어의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!