Переадресация на HTTPS в Docker
Переадресация на HTTPS отправляет обычный запрос
на шифрованный адрес того же хоста.
Посредник redirectscheme
с полем scheme
равным https
меняет схему в ответе браузеру.
Роутер на точке web
подключает этот посредник к правилу хоста.
Роутер на websecure
принимает уже шифрованный запрос
с тем же 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.middlewares.to-https.redirectscheme.scheme=https
- traefik.http.routers.app-http.rule=Host(`app.example.com`)
- traefik.http.routers.app-http.entrypoints=web
- traefik.http.routers.app-http.middlewares=to-https
- traefik.http.routers.app-https.rule=Host(`app.example.com`)
- traefik.http.routers.app-https.entrypoints=websecure
- traefik.http.routers.app-https.tls.certresolver=le
volumes:
certs:
Фоновый запуск:
docker compose up -d
Запрос по
http://app.example.com
на живом домене уходит на
https://app.example.com
с тем же именем в строке.
Проверка сработает, когда DNS
ведёт на этот сервер
и TLS-цепочка с резолвером le
может установиться.
Опишите сервис shop на nginx с посредником force-tls, HTTP-роутером shop-plain и HTTPS-роутером shop-tls для app.example.com.
Сформулируйте, что увидит браузер при обращении по обычному HTTP к хосту из правила, если домен указывает на сервер.