179 lines
No EOL
4.8 KiB
Markdown
179 lines
No EOL
4.8 KiB
Markdown
# File Backends
|
|
|
|
Like any other reverse proxy, Træfik can be configured with a file. You have three choices:
|
|
|
|
## Simple
|
|
|
|
Add your configuration at the end of the global configuration file `traefik.toml`:
|
|
|
|
```toml
|
|
# traefik.toml
|
|
logLevel = "DEBUG"
|
|
defaultEntryPoints = ["http", "https"]
|
|
[entryPoints]
|
|
[entryPoints.http]
|
|
address = ":80"
|
|
[entryPoints.http.redirect]
|
|
entryPoint = "https"
|
|
[entryPoints.https]
|
|
address = ":443"
|
|
[entryPoints.https.tls]
|
|
[[entryPoints.https.tls.certificates]]
|
|
CertFile = "integration/fixtures/https/snitest.com.cert"
|
|
KeyFile = "integration/fixtures/https/snitest.com.key"
|
|
[[entryPoints.https.tls.certificates]]
|
|
CertFile = "integration/fixtures/https/snitest.org.cert"
|
|
KeyFile = "integration/fixtures/https/snitest.org.key"
|
|
|
|
[file]
|
|
|
|
# rules
|
|
[backends]
|
|
[backends.backend1]
|
|
[backends.backend1.circuitbreaker]
|
|
expression = "NetworkErrorRatio() > 0.5"
|
|
[backends.backend1.servers.server1]
|
|
url = "http://172.17.0.2:80"
|
|
weight = 10
|
|
[backends.backend1.servers.server2]
|
|
url = "http://172.17.0.3:80"
|
|
weight = 1
|
|
[backends.backend2]
|
|
[backends.backend2.maxconn]
|
|
amount = 10
|
|
extractorfunc = "request.host"
|
|
[backends.backend2.LoadBalancer]
|
|
method = "drr"
|
|
[backends.backend2.servers.server1]
|
|
url = "http://172.17.0.4:80"
|
|
weight = 1
|
|
[backends.backend2.servers.server2]
|
|
url = "http://172.17.0.5:80"
|
|
weight = 2
|
|
|
|
[frontends]
|
|
[frontends.frontend1]
|
|
backend = "backend2"
|
|
[frontends.frontend1.routes.test_1]
|
|
rule = "Host:test.localhost"
|
|
[frontends.frontend2]
|
|
backend = "backend1"
|
|
passHostHeader = true
|
|
priority = 10
|
|
|
|
# restrict access to this frontend to the specified list of IPv4/IPv6 CIDR Nets
|
|
# an unset or empty list allows all Source-IPs to access
|
|
# if one of the Net-Specifications are invalid, the whole list is invalid
|
|
# and allows all Source-IPs to access.
|
|
whitelistSourceRange = ["10.42.0.0/16", "152.89.1.33/32", "afed:be44::/16"]
|
|
|
|
entrypoints = ["https"] # overrides defaultEntryPoints
|
|
[frontends.frontend2.routes.test_1]
|
|
rule = "Host:{subdomain:[a-z]+}.localhost"
|
|
[frontends.frontend3]
|
|
entrypoints = ["http", "https"] # overrides defaultEntryPoints
|
|
backend = "backend2"
|
|
rule = "Path:/test"
|
|
```
|
|
|
|
## Rules in a Separate File
|
|
|
|
Put your rules in a separate file, for example `rules.toml`:
|
|
|
|
```toml
|
|
# traefik.toml
|
|
logLevel = "DEBUG"
|
|
[entryPoints]
|
|
[entryPoints.http]
|
|
address = ":80"
|
|
[entryPoints.http.redirect]
|
|
entryPoint = "https"
|
|
[entryPoints.https]
|
|
address = ":443"
|
|
[entryPoints.https.tls]
|
|
[[entryPoints.https.tls.certificates]]
|
|
CertFile = "integration/fixtures/https/snitest.com.cert"
|
|
KeyFile = "integration/fixtures/https/snitest.com.key"
|
|
[[entryPoints.https.tls.certificates]]
|
|
CertFile = "integration/fixtures/https/snitest.org.cert"
|
|
KeyFile = "integration/fixtures/https/snitest.org.key"
|
|
|
|
[file]
|
|
filename = "rules.toml"
|
|
```
|
|
|
|
```toml
|
|
# rules.toml
|
|
[backends]
|
|
[backends.backend1]
|
|
[backends.backend1.circuitbreaker]
|
|
expression = "NetworkErrorRatio() > 0.5"
|
|
[backends.backend1.servers.server1]
|
|
url = "http://172.17.0.2:80"
|
|
weight = 10
|
|
[backends.backend1.servers.server2]
|
|
url = "http://172.17.0.3:80"
|
|
weight = 1
|
|
[backends.backend2]
|
|
[backends.backend2.maxconn]
|
|
amount = 10
|
|
extractorfunc = "request.host"
|
|
[backends.backend2.LoadBalancer]
|
|
method = "drr"
|
|
[backends.backend2.servers.server1]
|
|
url = "http://172.17.0.4:80"
|
|
weight = 1
|
|
[backends.backend2.servers.server2]
|
|
url = "http://172.17.0.5:80"
|
|
weight = 2
|
|
|
|
[frontends]
|
|
[frontends.frontend1]
|
|
backend = "backend2"
|
|
[frontends.frontend1.routes.test_1]
|
|
rule = "Host:test.localhost"
|
|
[frontends.frontend2]
|
|
backend = "backend1"
|
|
passHostHeader = true
|
|
priority = 10
|
|
entrypoints = ["https"] # overrides defaultEntryPoints
|
|
[frontends.frontend2.routes.test_1]
|
|
rule = "Host:{subdomain:[a-z]+}.localhost"
|
|
[frontends.frontend3]
|
|
entrypoints = ["http", "https"] # overrides defaultEntryPoints
|
|
backend = "backend2"
|
|
rule = "Path:/test"
|
|
```
|
|
|
|
## Multiple .toml Files
|
|
|
|
You could have multiple `.toml` files in a directory:
|
|
|
|
```toml
|
|
[file]
|
|
directory = "/path/to/config/"
|
|
```
|
|
|
|
If you want Træfik to watch file changes automatically, just add:
|
|
|
|
```toml
|
|
[file]
|
|
watch = true
|
|
```
|
|
|
|
The configuration files can be also templates written using functions provided by [go template](https://golang.org/pkg/text/template/) as well as functions provided by the [sprig library](https://masterminds.github.io/sprig/), like this:
|
|
|
|
```tmpl
|
|
[backends]
|
|
[backends.backend1]
|
|
url = "http://firstserver"
|
|
[backends.backend2]
|
|
url = "http://secondserver"
|
|
|
|
{{$frontends := dict "frontend1" "backend1" "frontend2" "backend2"}}
|
|
[frontends]
|
|
{{range $frontend, $backend := $frontends}}
|
|
[frontends.{{$frontend}}]
|
|
backend = "{{$backend}}"
|
|
{{end}}
|
|
``` |