【发布时间】:2020-09-07 01:34:55
【问题描述】:
我有一个基本的 Traefik 2 设置,适用于 HTTP here...
现在我正在尝试让 HTTPS 正常工作,并使用 TLS 和重定向对仪表板进行基本身份验证...
docker_compose.yml:
version: '3.8'
networks:
myweb:
external: true
services:
proxy:
image: traefik:v2.3.0-rc4-windowsservercore-1809
container_name: traefik
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
# Mount the certs drive
- ./traefik-ssl-certs/:c:/certs/
# Mount the config folder
- ./traefik-config/:c:/config/
# Mount the host docker engine pipe ("docker volume ls")
- source: '\\.\pipe\docker_engine'
target: '\\.\pipe\docker_engine'
type: npipe
command:
- "--api.insecure=true"
# Register the traefik config directory as per: https://docs.traefik.io/providers/file/#directory
- --providers.file.directory=c:/config/
- --providers.file.watch=true
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
# Redirect http to https
- --entrypoints.web.http.redirections.entryPoint.to=websecure
- --entrypoints.web.http.redirections.entryPoint.scheme=https
- --entrypoints.web.http.redirections.entrypoint.permanent=true
# Configure Docker provider
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.endpoint=npipe:////./pipe/docker_engine"
- "--providers.docker.network=myweb"
- "--providers.docker.watch=true"
networks:
- myweb
labels:
- traefik.http.routers.api.service=api@internal
- traefik.enable=true
- traefik.docker.network=myweb
remoteling:
image: remoteling:latest
container_name: remoteling
networks:
- myweb
labels:
- traefik.enable=true
- traefik.docker.network=myweb
- traefik.http.middlewares.http2https.redirectscheme.scheme=https
- traefik.http.routers.remoteling-http.middlewares=http2https
- traefik.http.routers.remoteling-http.rule=Host(`example.com`) || Host(`example.example.com`)
- traefik.http.routers.remoteling-http.entrypoints=web
- traefik.http.services.remoteling.loadbalancer.server.port=443
- traefik.http.routers.remoteling-https.rule=Host(`example.com`) || Host(`example.example.com`)
- traefik.http.routers.remoteling-https.entrypoints=websecure
- traefik.http.routers.remoteling-https.tls=true
depends_on:
- proxy
我正在从 powershell 运行:
docker network create -d nat myweb
docker-compose -p myweb up
在我的工作目录中,我有以下文件结构:
- ./docker-compose.yml
- ./traefik-config/traefik.yml
- ./traefik-ssl-certs/example.com.crt
- ./traefik-ssl-certs/example.com.key
- ./traefik-ssl-certs/example.example.com.key
- ./traefik-ssl-certs/example.example.com.key
traefik.yml 文件如下所示:
tls:
certificates:
- certFile: c:/certs/example.example.com.crt
keyFile: c:/certs/example.example.com.key
- certFile: c:/certs/example.com.crt
keyFile: c:/certs/example.com.key
traefik 仪表板显示我的服务定义为负载均衡器,这很好(除了负载均衡器之外还有其他类型的服务吗?我不确定除了通过负载均衡器之外如何定义端口)。单击该服务会为我提供本地网络 IP - 当我访问该 IP 时,我的网站加载正常(尽管会出现 SSL 证书不匹配警告 - 预期)。
但是,当我尝试访问 https://example.com 或 https://example.example.com - 我得到一个 502 Bad Gateway。知道为什么我会得到这个吗?
浏览器显示 SSL 证书有效,没有警告,所以我认为我的证书配置没问题。
http 到 https 的重定向似乎有效,如果我访问 http://example.com,它会将我转发到 https://example.com
我的路由配置有什么问题导致这些错误网关?
【问题讨论】: