Маршрут через HTTPS в Docker
Маршрут через HTTPS включает шифрование
и называет резолвер, который выпишет сертификат.
Метка traefik.http.routers.app.entrypoints=websecure
ведёт запрос на порт 443,
метка traefik.http.routers.app.tls.certresolver=le
связывает TLS с резолвером le.
Правило Host(`app.example.com`)
отбирает только этот хост.
Сервис site
на nginx
без ports
и прокси с резолвером в одном файле:
services:
proxy:
image: traefik:3
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.le.acme.email=admin@example.com
- --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.le.acme.httpchallenge.entrypoint=web
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- certs:/letsencrypt
site:
image: nginx
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(`app.example.com`)
- traefik.http.routers.app.entrypoints=websecure
- traefik.http.routers.app.tls.certresolver=le
volumes:
certs:
Фоновый подъём:
docker compose up -d
Страница по
https://app.example.com
откроется, когда имя в DNS
указывает на этот сервер
и Let's Encrypt успешно пройдёт проверку.
До этого браузер может показать ошибку TLS
или не найти хост.
Факт получения сертификата зависит от домена и портов,
а не только от меток в файле.
Опишите сервис front на nginx с роутером front, хостом app.example.com, точкой websecure и резолвером le в метке TLS.
Запишите, какие два условия снаружи нужны, чтобы страница по шифрованному адресу открылась для этого правила.