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

Traefik配置:允许用户通过CNAME自定义域名访问Docker后端服务

解决Traefik允许CNAME访问的404问题

首先,你碰到的404问题核心原因很明确:你用的是Traefik v1版本,当前配置的路由规则只认sub.example.com这个Host头,但用户通过sub.usera.com访问时,请求带的Host头是sub.usera.com,完全不匹配规则,所以Traefik找不到对应的后端服务,直接返回了404。

下面是一步步的解决办法:

1. 更新Traefik路由规则,匹配多域名

你需要修改docker-compose.yml里服务的traefik.frontend.rule标签,让它同时兼容你的原始域名和用户的CNAME域名:

traefik.frontend.rule=Host:sub.example.com,sub.usera.com

如果有多个用户需要添加自定义域名,直接用逗号分隔追加即可。

进阶:支持任意CNAME域名(谨慎使用)

要是想允许所有CNAME到sub.example.com的域名访问,可以用HostRegexp规则匹配任意Host头:

traefik.frontend.rule=HostRegexp:{host:.+}

⚠️ 注意:这种方式会把所有指向Traefik的请求都路由到这个服务,只适合单服务场景,或者你能确保不会和其他服务的路由冲突。

2. 验证配置生效

修改完docker-compose.yml后,重启服务和Traefik:

docker-compose down && docker-compose up -d

然后查看Traefik日志,确认新的路由规则已经加载:

docker logs <你的traefik容器名称>

日志里应该能看到包含sub.example.com和sub.usera.com的前端规则记录。

3. 检查DNS解析与请求头

  • 先用nslookup确认用户的CNAME解析正常:
    nslookup sub.usera.com
    
    要确保返回的IP是你的Traefik服务器IP(也就是sub.example.com对应的IP)。
  • 用curl测试请求,确认Host头正确传递:
    curl -v http://sub.usera.com
    
    在输出里找Host: sub.usera.com这一行,确保Traefik收到的是正确的Host头。

4. 确认Docker网络配置

要保证你的服务和Traefik都加入了http_network这个Docker网络:

  • 查看Traefik的网络信息:
    docker inspect <你的traefik容器名称> | grep Networks
    
  • 查看你的服务的网络信息:
    docker inspect <你的应用服务容器名称> | grep Networks
    
    两者都必须包含http_network,否则容器间的请求没法正常传递。

5. 复查Web应用的域名限制

虽然你说Web应用已经处理了主机重定向,但还是要确认应用本身是否允许sub.usera.com作为合法域名访问。不少应用有域名白名单机制,哪怕Traefik把请求传过去了,应用也可能直接拒绝或返回错误。


内容的提问来源于stack exchange,提问作者gamalan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:34:49