Go Fiber 한글 공식 문서
  • 🙇‍♀️안녕하세요
  • 🏠Home
    • 👋Welcome
    • 📁API
      • 📦Fiber
      • 🚀App
      • 🧠Ctx
      • 📋Constants
      • 🌎Client
      • 📃Log
      • 🧬Middleware
        • Adaptor
        • BasicAuth
        • Cache
        • Compress
        • CORS
        • CSRF
        • EarlyData
        • Encrypt Cookie
        • EnvVar
        • ETag
        • ExpVar
        • Favicon
        • FileSystem
        • Health Check
        • Helmet
        • Idempotency
        • Keyauth
        • Limiter
        • Logger
        • Monitor
        • Pprof
        • Proxy
        • Recover
        • Redirect
        • RequestID
        • Rewrite
        • Session
        • Skip
        • Timeout
    • 📁Guide
      • 🔌Routing
      • 🎭Grouping
      • 📝Templates
      • 🐛Error Handling
      • 🔎Validation
      • 🎣Hooks
      • ⚡Make Fiber Faster
    • 📁Extra
      • 🤔FAQ
      • 📊Benchmarks
  • 🧩Extra
    • 🧬Contrip
      • 👋Welcome
      • Casbin
      • Fgprof
      • Fiberi18n
      • Fibernewrelic
      • Fibersentry
      • Fiberzap
      • Fiberzerolog
      • JWT
      • LoadShed
      • Opafiber
      • Otelfiber
        • Example
      • Paseto
      • README
      • Swagger
      • Websocket
    • 📦Storage
      • 👋Welcome
      • ArangoDB
      • Azure Blob
      • Badger
      • Bbolt
      • Coherence
      • Couchbase
      • DynamoDB
      • Etcd
      • Memcache
      • Memory
      • Minio
      • MongoDB
      • MSSQL
      • MySQL
      • Nats
      • Pebble
      • Postgres
      • Redis
      • Ristretto
      • Rueidis
      • S3
      • ScyllaDb
      • SQLite3
    • 📃Template
      • 👋Welcome
      • Ace
      • Amber
      • Django
      • Handlebars
      • HTML
        • Golang Templates Cheatsheet
      • Jet
      • Mustache
      • Pug
      • Slim
Powered by GitBook
On this page
  • Signatures
  • Examples
  • Sliding window
  • Config
  • Default Config
  • Custom Storage/Database
  1. Home
  2. API
  3. Middleware

Limiter

PreviousKeyauthNextLogger

Last updated 1 year ago


를 위한 Limiter 미들웨어로, 패스워드 재설정과 같은 공개 API 및 엔드포인트에 대한 반복 요청을 제한하는 데 사용됩니다. 또한 API 클라이언트, 웹 크롤링 또는 제한이 필요한 기타 작업에도 유용합니다.

이 미들웨어는 다양한 데이터베이스를 단일 인터페이스를 통해 지원하기 위해 패키지를 사용합니다. 이 미들웨어의 기본 구성은 메모리에 데이터를 저장하며, 다른 데이터베이스의 예는 아래 예제를 참조하세요.

이 모듈은 기본적으로 다른 프로세스/서버와 상태를 공유하지 않습니다.

Signatures

func New(config ...Config) fiber.Handler

Examples

Fiber 웹 프레임워크의 일부인 미들웨어 패키지를 가져옵니다.

import (
  "github.com/gofiber/fiber/v2"
  "github.com/gofiber/fiber/v2/middleware/limiter"
)

Fiber 앱을 초기화한 후 다음과 같은 가능성을 사용할 수 있습니다:

// 기본 구성 초기화
app.Use(limiter.New())

// 또는 사용자 정의를 위해 구성 확장
app.Use(limiter.New(limiter.Config{
    Next: func(c *fiber.Ctx) bool {
        return c.IP() == "127.0.0.1"
    },
    Max:          20,
    Expiration:     30 * time.Second,
    KeyGenerator:          func(c *fiber.Ctx) string {
        return c.Get("x-forwarded-for")
    },
    LimitReached: func(c *fiber.Ctx) error {
        return c.SendFile("./toofast.html")
    },
    Storage: myCustomStorage{},
}))

Sliding window

이러한 구성의 예는 다음과 같습니다:

app.Use(limiter.New(limiter.Config{
    Max:            20,
    Expiration:     30 * time.Second,
    LimiterMiddleware: limiter.SlidingWindow{},
}))

이는 모든 창이 이전 창(있었던 경우)을 고려한다는 것을 의미합니다. 주어진 속도 공식은 다음과 같습니다:

weightOfPreviousWindpw = previous window's amount request * (whenNewWindow / Expiration)
rate = weightOfPreviousWindpw + current window's amount request.

Config

속성
유형
설명
기본값

Next

func(*fiber.Ctx) bool

Next는 true를 반환할 때 이 미들웨어를 건너뛰는 함수를 정의합니다.

nil

Max

int

Expiration 초 동안 429 응답을 보내기 전에 최근 연결 수의 최대값입니다.

5

KeyGenerator

func(*fiber.Ctx) string

KeyGenerator를 사용하면 사용자 지정 키를 생성할 수 있으며, 기본적으로 c.IP()가 사용됩니다.

c.IP()를 기본값으로 사용하는 함수

Expiration

time.Duration

Expiration은 메모리에 요청 레코드를 보관하는 시간입니다.

1 * time.Minute

LimitReached

fiber.Handler

LimitReached는 요청이 제한에 도달했을 때 호출됩니다.

429 응답을 보내는 함수

SkipFailedRequests

bool

true로 설정하면 StatusCode >= 400인 요청이 계산되지 않습니다.

false

SkipSuccessfulRequests

bool

true로 설정하면 StatusCode < 400인 요청이 계산되지 않습니다.

false

Storage

fiber.Storage

Store는 미들웨어의 상태를 저장하는 데 사용됩니다.

이 프로세스에만 사용되는 인메모리 스토어

LimiterMiddleware

LimiterHandler

LimiterMiddleware는 제한 미들웨어를 구현하는 구조체입니다.

새로운 Fixed Window Rate Limiter

Duration (Deprecated)

time.Duration

사용되지 않음: 대신 Expiration 사용

-

Store (Deprecated)

fiber.Storage

사용되지 않음: 대신 Storage 사용

-

Key (Deprecated)

func(*fiber.Ctx) string

사용되지 않음: 대신 KeyGenerator 사용

-

Storage 인터페이스를 구현하는 경우 사용자 지정 저장소를 사용할 수 있습니다. 자세한 내용과 예제는 store.go에서 찾을 수 있습니다.

Default Config

var ConfigDefault = Config{
    Max:        5,
    Expiration: 1 * time.Minute,
    KeyGenerator: func(c *fiber.Ctx) string {
        return c.IP()
    },
    LimitReached: func(c *fiber.Ctx) error {
        return c.SendStatus(fiber.StatusTooManyRequests)
    },
    SkipFailedRequests: false,
    SkipSuccessfulRequests: false,
    LimiterMiddleware: FixedWindow{},
}

Custom Storage/Database

storage := sqlite3.New() // From github.com/gofiber/storage/sqlite3
app.Use(limiter.New(limiter.Config{
	Storage: storage,
}))

표준 고정 창 알고리즘 대신 알고리즘을 활성화할 수 있습니다.

패키지의 모든 스토리지를 사용할 수 있습니다.

🏠
📁
🧬
Fiber
Storage
sliding window
storage