HTTP Middlewares

Controlling connections

Overview

Configuration Example

Docker

  1. # As a Docker Label
  2. whoami:
  3. # A container that exposes an API to show its IP address
  4. image: traefik/whoami
  5. labels:
  6. # Create a middleware named `foo-add-prefix`
  7. - "traefik.http.middlewares.foo-add-prefix.addprefix.prefix=/foo"
  8. # Apply the middleware named `foo-add-prefix` to the router named `router1`
  9. - "traefik.http.routers.router1.middlewares=foo-add-prefix@docker"

Kubernetes IngressRoute

  1. # As a Kubernetes Traefik IngressRoute
  2. apiVersion: apiextensions.k8s.io/v1beta1
  3. kind: CustomResourceDefinition
  4. metadata:
  5. name: middlewares.traefik.containo.us
  6. spec:
  7. group: traefik.containo.us
  8. version: v1alpha1
  9. names:
  10. kind: Middleware
  11. plural: middlewares
  12. singular: middleware
  13. scope: Namespaced
  14. ---
  15. apiVersion: traefik.containo.us/v1alpha1
  16. kind: Middleware
  17. metadata:
  18. name: stripprefix
  19. spec:
  20. stripPrefix:
  21. prefixes:
  22. - /stripit
  23. ---
  24. apiVersion: traefik.containo.us/v1alpha1
  25. kind: IngressRoute
  26. metadata:
  27. name: ingressroute
  28. spec:
  29. # more fields...
  30. routes:
  31. # more fields...
  32. middlewares:
  33. - name: stripprefix

Consul Catalog

  1. # Create a middleware named `foo-add-prefix`
  2. - "traefik.http.middlewares.foo-add-prefix.addprefix.prefix=/foo"
  3. # Apply the middleware named `foo-add-prefix` to the router named `router1`
  4. - "traefik.http.routers.router1.middlewares=foo-add-prefix@consulcatalog"

Marathon

  1. "labels": {
  2. "traefik.http.middlewares.foo-add-prefix.addprefix.prefix": "/foo",
  3. "traefik.http.routers.router1.middlewares": "foo-add-prefix@marathon"
  4. }

Rancher

  1. # As a Rancher Label
  2. labels:
  3. # Create a middleware named `foo-add-prefix`
  4. - "traefik.http.middlewares.foo-add-prefix.addprefix.prefix=/foo"
  5. # Apply the middleware named `foo-add-prefix` to the router named `router1`
  6. - "traefik.http.routers.router1.middlewares=foo-add-prefix@rancher"

File (TOML)

  1. # As TOML Configuration File
  2. [http.routers]
  3. [http.routers.router1]
  4. service = "service1"
  5. middlewares = ["foo-add-prefix"]
  6. rule = "Host(`example.com`)"
  7. [http.middlewares]
  8. [http.middlewares.foo-add-prefix.addPrefix]
  9. prefix = "/foo"
  10. [http.services]
  11. [http.services.service1]
  12. [http.services.service1.loadBalancer]
  13. [[http.services.service1.loadBalancer.servers]]
  14. url = "http://127.0.0.1:80"

File (YAML)

  1. # As YAML Configuration File
  2. http:
  3. routers:
  4. router1:
  5. service: service1
  6. middlewares:
  7. - "foo-add-prefix"
  8. rule: "Host(`example.com`)"
  9. middlewares:
  10. foo-add-prefix:
  11. addPrefix:
  12. prefix: "/foo"
  13. services:
  14. service1:
  15. loadBalancer:
  16. servers:
  17. - url: "http://127.0.0.1:80"

Available HTTP Middlewares

MiddlewarePurposeArea
AddPrefixAdds a Path PrefixPath Modifier
BasicAuthAdds Basic AuthenticationSecurity, Authentication
BufferingBuffers the request/responseRequest Lifecycle
ChainCombines multiple pieces of middlewareMisc
CircuitBreakerPrevents calling unhealthy servicesRequest Lifecycle
CompressCompresses the responseContent Modifier
ContentTypeHandles Content-Type auto-detectionMisc
DigestAuthAdds Digest AuthenticationSecurity, Authentication
ErrorsDefines custom error pagesRequest Lifecycle
ForwardAuthDelegates AuthenticationSecurity, Authentication
HeadersAdds / Updates headersSecurity
IPWhiteListLimits the allowed client IPsSecurity, Request lifecycle
InFlightReqLimits the number of simultaneous connectionsSecurity, Request lifecycle
PassTLSClientCertAdds Client Certificates in a HeaderSecurity
RateLimitLimits the call frequencySecurity, Request lifecycle
RedirectSchemeRedirects based on schemeRequest lifecycle
RedirectRegexRedirects based on regexRequest lifecycle
ReplacePathChanges the path of the requestPath Modifier
ReplacePathRegexChanges the path of the requestPath Modifier
RetryAutomatically retries in case of errorRequest lifecycle
StripPrefixChanges the path of the requestPath Modifier
StripPrefixRegexChanges the path of the requestPath Modifier