无域名下通过Traefik将Traefik UI路由至https://myhost/traefik
实现无域名下Traefik Web UI的路径路由(HTTPS)
嘿,我明白你现在的处境——刚接触Docker和Traefik,没有域名还想把默认在8080端口的Web UI转到https://myhost/traefik访问,而且不想用Host规则对吧?完全没问题,咱们用**路径前缀匹配(PathPrefix)**加上自签名TLS证书就能搞定,下面是具体步骤:
1. 准备Traefik核心配置文件
先创建一个traefik.yml配置文件,这里我们开启Docker provider、API访问,同时配置TLS和入口点:
entryPoints: web: address: ":80" # 把所有HTTP请求重定向到HTTPS http: redirections: entryPoint: to: websecure scheme: https websecure: address: ":443" providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false # 只暴露明确设置标签的容器 api: dashboard: true # 开启Web UI insecure: false # 关闭不安全的8080直接访问 tls: certificates: - certFile: /certs/myhost.crt keyFile: /certs/myhost.key
2. 生成自签名TLS证书
因为要用HTTPS,没有域名的话咱们自己生成证书。在当前目录创建certs文件夹,然后用openssl生成证书:
mkdir certs openssl req -x509 -newkey rsa:4096 -keyout certs/myhost.key -out certs/myhost.crt -days 365 -nodes -subj "/CN=myhost"
这里/CN=myhost要和你访问的主机名一致,这样浏览器虽然会提示不安全,但能正常建立HTTPS连接。
3. 编写Docker Compose文件
创建docker-compose.yml,定义Traefik服务,通过标签来配置路径路由:
version: "3.8" services: traefik: image: traefik:v2.10 container_name: traefik ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./traefik.yml:/etc/traefik/traefik.yml:ro - ./certs:/certs:ro labels: # 启用这个容器的Traefik路由 - "traefik.enable=true" # 绑定到websecure入口点(HTTPS) - "traefik.http.routers.traefik.entrypoints=websecure" # 路径前缀匹配:所有/traefik开头的请求都转发到Traefik UI - "traefik.http.routers.traefik.rule=PathPrefix(`/traefik`)" # 启用TLS - "traefik.http.routers.traefik.tls=true" # 去掉路径前缀,让Traefik UI能正确加载内部资源(不然UI会找不到静态文件) - "traefik.http.middlewares.traefik-strip-prefix.stripprefix.prefixes=/traefik" - "traefik.http.routers.traefik.middlewares=traefik-strip-prefix" # 转发到Traefik UI的内部端口(默认8080) - "traefik.http.services.traefik.loadbalancer.server.port=8080"
4. 启动并测试
运行下面的命令启动容器:
docker-compose up -d
现在你就可以通过https://myhost/traefik访问Traefik的Web UI了。注意第一次访问浏览器会提示证书不安全,这是正常的(因为是自签名),你可以选择信任后继续访问。
关键细节说明
- PathPrefix规则:替代Host规则,通过路径来匹配请求,完美适配无域名的场景。
- StripPrefix中间件:必须加上,因为Traefik UI本身是基于根路径(
/)开发的,如果不去掉/traefik前缀,UI的静态资源会请求/traefik/static/xxx,而实际资源在/static/xxx,会导致UI加载异常。 - HTTP重定向:配置里把80端口的请求自动转到443,确保所有访问都是HTTPS。
内容的提问来源于stack exchange,提问作者bobolafrite
相关产品推荐
相关产品推荐

