无法用Traefik反向代理Jellyfin到子目录(不支持修改Base URL)
解决Traefik反向代理Jellyfin子目录的Bad Gateway问题
核心问题分析
Jellyfin对子目录部署有特定的配置要求,不像Glances这类轻量服务可直接通过反向代理映射。它需要在自身配置中明确指定子目录路径,同时配合Traefik的路径重写规则,否则会因请求路径不匹配出现Bad Gateway错误。
具体修复步骤
1. 修正Jellyfin的docker-compose配置
添加Jellyfin专属的环境变量,并完善Traefik标签的路径重写规则:
services: jellyfin: image: jellyfin/jellyfin container_name: jellyfin environment: - JELLYFIN_ContextPath=/jellyfin # 关键:告知Jellyfin自身运行的子目录 - JELLYFIN_PublishedServerUrl=https://你的TailscaleIP/jellyfin # 替换为实际地址 labels: - "traefik.enable=true" - "traefik.http.routers.jellyfin.entrypoints=web,websecure" - "traefik.http.routers.jellyfin.rule=PathPrefix(`/jellyfin`)" - "traefik.http.routers.jellyfin.tls=true" - "traefik.http.services.jellyfin.loadbalancer.server.port=8096" # 必须添加路径重写,转发时去掉/jellyfin前缀 - "traefik.http.middlewares.jellyfin-stripprefix.stripprefix.prefixes=/jellyfin" - "traefik.http.routers.jellyfin.middlewares=jellyfin-stripprefix@docker" volumes: - ./jellyfin/config:/config - ./jellyfin/cache:/cache - ./media:/media restart: unless-stopped
2. 确认Traefik配置完整性
检查traefik.yml是否正确启用Docker Provider并支持中间件加载:
api: dashboard: true entryPoints: web: address: ":80" http: redirections: entryPoint: to: websecure scheme: https websecure: address: ":443" providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false certificatesResolvers: letsencrypt: acme: email: 你的邮箱地址 storage: acme.json httpChallenge: entryPoint: web
3. 重启容器生效
执行命令重启Traefik和Jellyfin:
docker-compose down docker-compose up -d
4. 排查日志(若问题仍存在)
查看Traefik日志定位具体错误:
docker logs 你的Traefik容器名称
常见误区提醒
- 遗漏
JELLYFIN_ContextPath:Jellyfin无法识别子目录请求,导致内部路由出错 - 未配置路径重写:Traefik转发给Jellyfin的请求带
/jellyfin前缀,Jellyfin无法处理 - 错误设置
PublishedServerUrl:Jellyfin生成的静态资源链接路径错误,导致前端加载失败
内容的提问来源于stack exchange,提问作者user9541267
相关产品推荐
相关产品推荐

