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. - "[email protected]"

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. - "[email protected]talog"

Marathon

  1. "labels": {
  2. "traefik.http.middlewares.foo-add-prefix.addprefix.prefix": "/foo",
  3. "traefik.http.routers.router1.middlewares": "[email protected]"
  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. - "[email protected]"

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

Community Middlewares

Please take a look at the community-contributed plugins in the plugin catalog.


Using Traefik for Business Applications?

If you are using Traefik for commercial applications, consider the Enterprise Edition. You can use it as your:

Traefik Enterprise enables centralized access management, distributed Let’s Encrypt, and other advanced capabilities. Learn more in this 15-minute technical walkthrough.