Traefik - это modern reverse proxy и load balancer, который часто используется в контейнеризированных средах, таких как Docker. Если у вас не настроен `entryPoint` для HTTPS, сначала вам нужно будет его настроить, если вы хотите использовать протокол HTTPS для переадресации трафика.
Вот шаги для настройки в Traefik с использованием Docker и Traefik в виде Docker контейнера:
### Шаг 1: Подготовьте конфигурационный файл Traefik
Создайте файл `traefik.toml` или `traefik.yml` (в зависимости от того, какой формат конфигурации вы предпочитаете), чтобы настроить entry points и, возможно, SSL/TLS:
#### `traefik.toml` пример:
```toml
[entryPoints]
[entryPoints.web]
address = ":80"
[entryPoints.web.http.redirections.entryPoint]
to = "websecure"
scheme = "https"
[entryPoints.websecure]
address = ":443"
[entryPoints.websecure.http.tls]
certResolver = "myresolver"
[certificatesResolvers.myresolver.acme]
email = "[email protected]"
storage = "acme.json"
[certificatesResolvers.myresolver.acme.tlsChallenge]
```
#### `traefik.yml` пример:
```yaml
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
http:
tls:
certResolver: myresolver
certificatesResolvers:
myresolver:
acme:
email: [email protected]
storage: acme.json
tlsChallenge: {}
```
### Шаг 2: Запустите Traefik с подготовленным конфигом
Используйте Docker Compose или команду Docker CLI, чтобы запустить Traefik с данным конфигом:
#### `docker-compose.yml` пример:
```yaml
version: "3"
services:
traefik:
image: traefik:v2.3
command: --configFile=/traefik.toml
ports:
- "80:80"
- "443:443"
volumes:
- ./traefik.toml:/traefik.toml
- ./acme.json:/acme.json
- /var/run/docker.sock:/var/run/docker.sock
```
Убедитесь, что `acme.json` имеет права доступа `600`:
```sh
touch acme.json
chmod 600 acme.json
```
### Шаг 3: Запустите сервисы с метками для Traefik
В `docker-compose.yml` для сервисов, которые вы хотите обслуживать через Traefik, установите соответствующие метки:
```yaml
services:
myservice:
image: myserviceimage
labels:
- "traefik.enable=true"
- "traefik.http.routers.myservicename.rule=Host(`myservice.example.com`)"
- "traefik.http.routers.myservicename.entrypoints=websecure"
- "traefik.http.routers.myservicename.tls.certresolver=myresolver"
```
### Шаг 4: Переадресация на внешний сервис
Если вы хотите один из доменов перенаправить на другой внешний сервис (не локальный сервис), вы можете использовать функцию миддлвара в Traefik для редиректа:
```yaml
services:
traefik:
# ... как в предыдущем блоке
labels:
- "traefik.http.middlewares.test-redirectregex.redirectregex.regex=^https://myservice.example.com/(.*)"
- "traefik.http.middlewares.test-redirectregex.redirectregex.replacement=https://external-service.example.com/$${1}"
- "traefik.http.middlewares.test-redirectregex