2019-02-26 13:50:07 +00:00
# Middlewares
Tweaking the Request
{: .subtitle }
![Overview ](../assets/img/middleware/overview.png )
2020-02-04 20:20:04 +00:00
Attached to the routers, pieces of middleware are a means of tweaking the requests before they are sent to your [service ](../routing/services/index.md ) (or before the answer from the services are sent to the clients).
2019-02-26 13:50:07 +00:00
2020-02-04 20:20:04 +00:00
There are several available middleware in Traefik, some can modify the request, the headers, some are in charge of redirections, some add authentication, and so on.
2019-02-26 13:50:07 +00:00
2019-03-14 08:30:04 +00:00
Pieces of middleware can be combined in chains to fit every scenario.
2020-10-15 12:54:04 +00:00
!!! warning "Provider Namespace"
2021-02-11 13:34:04 +00:00
Be aware of the concept of Providers Namespace described in the [Configuration Discovery ](../providers/overview.md#provider-namespace ) section.
2020-10-15 12:54:04 +00:00
It also applies to Middlewares.
2019-03-14 08:30:04 +00:00
## Configuration Example
2019-02-26 13:50:07 +00:00
2019-03-29 11:34:05 +00:00
```yaml tab="Docker"
# As a Docker Label
whoami:
2019-06-24 04:04:03 +00:00
# A container that exposes an API to show its IP address
2020-09-16 13:46:04 +00:00
image: traefik/whoami
2019-03-29 11:34:05 +00:00
labels:
2019-06-24 04:04:03 +00:00
# Create a middleware named `foo-add-prefix`
2019-04-01 15:56:04 +00:00
- "traefik.http.middlewares.foo-add-prefix.addprefix.prefix=/foo"
2019-06-24 04:04:03 +00:00
# Apply the middleware named `foo-add-prefix` to the router named `router1`
2019-07-19 15:00:05 +00:00
- "traefik.http.routers.router1.middlewares=foo-add-prefix@docker"
2019-03-29 11:34:05 +00:00
```
2020-09-15 07:46:04 +00:00
```yaml tab="Kubernetes IngressRoute"
2019-03-29 11:34:05 +00:00
# As a Kubernetes Traefik IngressRoute
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: middlewares.traefik.containo.us
spec:
group: traefik.containo.us
version: v1alpha1
names:
2019-03-19 15:44:06 +00:00
kind: Middleware
2019-03-29 11:34:05 +00:00
plural: middlewares
singular: middleware
scope: Namespaced
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: stripprefix
spec:
2019-07-01 09:30:05 +00:00
stripPrefix:
2019-03-29 11:34:05 +00:00
prefixes:
- /stripit
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
2019-05-27 08:24:04 +00:00
name: ingressroute
2019-03-29 11:34:05 +00:00
spec:
# more fields...
routes:
2019-03-19 15:44:06 +00:00
# more fields...
2019-04-17 07:34:04 +00:00
middlewares:
2019-09-23 15:00:06 +00:00
- name: stripprefix
2019-03-29 11:34:05 +00:00
```
2019-10-15 15:34:08 +00:00
```yaml tab="Consul Catalog"
# Create a middleware named `foo-add-prefix`
- "traefik.http.middlewares.foo-add-prefix.addprefix.prefix=/foo"
# Apply the middleware named `foo-add-prefix` to the router named `router1`
- "traefik.http.routers.router1.middlewares=foo-add-prefix@consulcatalog"
```
2019-04-15 16:22:07 +00:00
```json tab="Marathon"
"labels": {
2019-06-24 04:04:03 +00:00
"traefik.http.middlewares.foo-add-prefix.addprefix.prefix": "/foo",
2019-09-09 08:36:08 +00:00
"traefik.http.routers.router1.middlewares": "foo-add-prefix@marathon"
2019-04-15 16:22:07 +00:00
}
```
```yaml tab="Rancher"
# As a Rancher Label
labels:
2019-06-24 04:04:03 +00:00
# Create a middleware named `foo-add-prefix`
2019-04-15 16:22:07 +00:00
- "traefik.http.middlewares.foo-add-prefix.addprefix.prefix=/foo"
2019-06-24 04:04:03 +00:00
# Apply the middleware named `foo-add-prefix` to the router named `router1`
2019-09-09 08:36:08 +00:00
- "traefik.http.routers.router1.middlewares=foo-add-prefix@rancher"
2019-06-21 15:18:05 +00:00
```
2019-07-22 07:58:04 +00:00
```toml tab="File (TOML)"
# As TOML Configuration File
2019-03-29 11:34:05 +00:00
[http.routers]
[http.routers.router1]
2019-07-01 09:30:05 +00:00
service = "myService"
middlewares = ["foo-add-prefix"]
rule = "Host(`example.com`)"
2019-03-29 11:34:05 +00:00
[http.middlewares]
2019-07-01 09:30:05 +00:00
[http.middlewares.foo-add-prefix.addPrefix]
2019-03-29 11:34:05 +00:00
prefix = "/foo"
[http.services]
2019-06-24 04:04:03 +00:00
[http.services.service1]
2019-07-01 09:30:05 +00:00
[http.services.service1.loadBalancer]
2019-03-29 11:34:05 +00:00
2019-07-01 09:30:05 +00:00
[[http.services.service1.loadBalancer.servers]]
url = "http://127.0.0.1:80"
2019-03-29 11:34:05 +00:00
```
2019-03-19 15:44:06 +00:00
2019-07-22 07:58:04 +00:00
```yaml tab="File (YAML)"
# As YAML Configuration File
http:
routers:
router1:
service: myService
middlewares:
2019-09-23 15:00:06 +00:00
- "foo-add-prefix"
2019-07-22 07:58:04 +00:00
rule: "Host(`example.com`)"
middlewares:
foo-add-prefix:
addPrefix:
prefix: "/foo"
services:
service1:
loadBalancer:
servers:
2019-09-23 15:00:06 +00:00
- url: "http://127.0.0.1:80"
2019-07-22 07:58:04 +00:00
```
2019-02-26 13:50:07 +00:00
## Available Middlewares
| Middleware | Purpose | Area |
|-------------------------------------------|---------------------------------------------------|-----------------------------|
| [AddPrefix ](addprefix.md ) | Add a Path Prefix | Path Modifier |
| [BasicAuth ](basicauth.md ) | Basic auth mechanism | Security, Authentication |
| [Buffering ](buffering.md ) | Buffers the request/response | Request Lifecycle |
| [Chain ](chain.md ) | Combine multiple pieces of middleware | Middleware tool |
| [CircuitBreaker ](circuitbreaker.md ) | Stop calling unhealthy services | Request Lifecycle |
2019-04-25 15:54:05 +00:00
| [Compress ](compress.md ) | Compress the response | Content Modifier |
2019-02-26 13:50:07 +00:00
| [DigestAuth ](digestauth.md ) | Adds Digest Authentication | Security, Authentication |
| [Errors ](errorpages.md ) | Define custom error pages | Request Lifecycle |
| [ForwardAuth ](forwardauth.md ) | Authentication delegation | Security, Authentication |
| [Headers ](headers.md ) | Add / Update headers | Security |
| [IPWhiteList ](ipwhitelist.md ) | Limit the allowed client IPs | Security, Request lifecycle |
2019-08-26 10:20:06 +00:00
| [InFlightReq ](inflightreq.md ) | Limit the number of simultaneous connections | Security, Request lifecycle |
2019-04-29 17:36:07 +00:00
| [PassTLSClientCert ](passtlsclientcert.md ) | Adding Client Certificates in a Header | Security |
2019-02-26 13:50:07 +00:00
| [RateLimit ](ratelimit.md ) | Limit the call frequency | Security, Request lifecycle |
| [RedirectScheme ](redirectscheme.md ) | Redirect easily the client elsewhere | Request lifecycle |
| [RedirectRegex ](redirectregex.md ) | Redirect the client elsewhere | Request lifecycle |
| [ReplacePath ](replacepath.md ) | Change the path of the request | Path Modifier |
| [ReplacePathRegex ](replacepathregex.md ) | Change the path of the request | Path Modifier |
| [Retry ](retry.md ) | Automatically retry the request in case of errors | Request lifecycle |
| [StripPrefix ](stripprefix.md ) | Change the path of the request | Path Modifier |
| [StripPrefixRegex ](stripprefixregex.md ) | Change the path of the request | Path Modifier |