You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无域名下通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:51:26