Harap dicatat bahwa ini adalah pertanyaan Traefik V2. Saya punya solusi pada V1 tetapi V2 adalah total rewamp.
Ini di atas seharusnya mengarahkan http://whoami.mysite.com ke http s : //whoami.mysite.com.
- Http s bekerja dengan baik.
- Http tidak mengalihkan ke https dan meningkatkan kesalahan 404.
Tidak ada file lain. Semua ada di Docker-compose.yml untuk saat ini karena ini adalah ujian untuk mempersiapkan penyebaran lebih lanjut.
version: "3.3"
services:
traefik:
image: "traefik:v2.0"
container_name: "traefik"
command:
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web-secure.address=:443"
- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true"
- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"
#- "--certificatesresolvers.myhttpchallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "[email protected]"
- "--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json"
labels:
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "containous/whoami"
container_name: "whoami"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.mysite.com`)"
- "traefik.http.routers.whoami.entrypoints=web"
- "traefik.http.routers.whoami.middlewares=redirect-to-https@docker"
- "traefik.http.routers.whoami-secured.rule=Host(`whoami.mysite.com`)"
- "traefik.http.routers.whoami-secured.entrypoints=web-secure"
- "traefik.http.routers.whoami-secured.tls=true"
- "traefik.http.routers.whoami-secured.tls.certresolver=myhttpchallenge"
Anda tidak perlu mengkonfigurasi layanan Traefik itu sendiri. Di Traefik Anda hanya perlu memiliki titik masuk ke: 443 (web-secure) dan: 80 (web)
Karena Traefik hanya bertindak sebagai entryPoint dan tidak akan melakukan pengalihan, middleware pada layanan target akan melakukan itu.
Sekarang konfigurasikan layanan target Anda sebagai berikut:
Jadi pada dasarnya alirannya seperti ini:
Permintaan: http://sub.domain.com:80 -> traefik (layanan) -> mywebserver-web (router, aturan http) -> mywebserver-redirect-web-secure (middleware, redirect ke https) - -> mywebserver-web-secure (router, https rule) -> mywebserver (layanan)
sumber
Ok, ditemukan ... Saya berasumsi bahwa middlewares dapat dideklarasikan pada level Traefik tetapi ini harus dinyatakan pada level layanan.
Garis ini :
Harus ada di label layanan whoami.
Poin lain, yang tidak terkait dengan masalah yang dijelaskan, adalah bahwa tantangan http harus dilakukan pada port 80.
Hapus "secure" di "web-secure".
sumber
traefik.http.middlewares.https-only.redirectscheme.scheme=https
dan dalam pelayanan app saya memiliki label:traefik.http.routers.myapp.rule=Host(
$ {APP_HOST})
,traefik.http.routers.myapp.entrypoints=web
,traefik.http.routers.myapp.middlewares=https-only
Saya sedang mencari jawaban ini ketika saya sedang mencari cara untuk mengarahkan kembali semuanya ke HTTPS melalui Traefik v2.2 dan opsi terbaik bagi saya adalah menambahkan variabel ENV ini ke Traefik dan secara otomatis mengarahkan ulang semua lalu lintas ke HTTPS.
Dengan ini saya tidak perlu menambahkan apa pun ke middleware.
sumber