Snippet Path

Different Traefik ratelimit based on HTTP Method

Authors
yaml
services:
    myservice:
    image: foo:v1
    labels:
        - traefik.http.services.myservice.loadbalancer.server.port=8080
        
        # Router for GET and OPTIONS with relaxed ratelimit
        - traefik.http.routers.foo-get-options.entrypoints=web
        - traefik.http.routers.foo-get-options.rule=Host(`${HOST}`) && (Method(`GET`) || Method(`OPTIONS`))
        - traefik.http.routers.foo-get-options.priority=1000
        - traefik.http.routers.foo-get-options.middlewares=gw-get-options-ratelimit
        - traefik.http.routers.foo-get-options.service=myservice
        - traefik.http.middlewares.foo-get-options-ratelimit.ratelimit.average=200
        - traefik.http.middlewares.foo-get-options-ratelimit.ratelimit.period=2s
        - traefik.http.middlewares.foo-get-options-ratelimit.ratelimit.burst=200
        - traefik.http.middlewares.foo-get-options-ratelimit.ratelimit.sourcecriterion.requestheadername=X-Forwarded-For
    
        # Router for the rest of the methods with stricter ratelimit
        - traefik.http.routers.foo.entrypoints=web
        - traefik.http.routers.foo.rule=Host(`${HOST}`)
        - traefik.http.routers.foo.priority=999
        - traefik.http.routers.foo.middlewares=gw-ratelimit
        - traefik.http.routers.foo.service=myservice
        - traefik.http.middlewares.foo-ratelimit.ratelimit.average=20
        - traefik.http.middlewares.foo-ratelimit.ratelimit.period=5s
        - traefik.http.middlewares.foo-ratelimit.ratelimit.burst=20
        - traefik.http.middlewares.foo-ratelimit.ratelimit.sourcecriterion.requestheadername=X-Forwarded-For