Nginx迁移至Traefik后Vaultwarden路径访问异常问题
核心原因
Vaultwarden前端的静态资源用的是相对路径。当你访问http://127.0.0.1/vaultwarden(无尾斜杠)时,浏览器会把当前路径识别为“根目录下的vaultwarden资源”,而非“vaultwarden目录”,所以加载静态资源时会请求/theme_head.js这种根路径下的文件,自然找不到;而访问带尾斜杠的http://127.0.0.1/vaultwarden/时,浏览器知道当前在vaultwarden目录下,资源请求路径会变成/vaultwarden/theme_head.js,就能正常加载。
Nginx与Traefik的差异
Nginx默认对无尾斜杠的目录请求会自动返回301重定向,跳转到带尾斜杠的版本,相当于帮你补全了路径,所以之前用Nginx时没这个问题。但Traefik默认没有这个自动重定向的逻辑,而whoami、Portainer这类服务要么本身用绝对路径加载资源,要么内部处理了路径补全,所以不受影响。
解决办法
有两种可行方案:
方案1:Traefik配置重定向中间件
给Vaultwarden的路由添加一个重定向中间件,把无尾斜杠的请求自动转到带尾斜杠的地址。示例动态配置(YAML格式):http: middlewares: vaultwarden-add-slash: redirectRegex: regex: ^https?://(.+)/vaultwarden$ replacement: $0/ permanent: true然后在Vaultwarden的路由规则里挂载这个中间件即可。
方案2:修改Vaultwarden的DOMAIN配置
给Vaultwarden设置DOMAIN环境变量为带尾斜杠的完整地址,比如:DOMAIN=http://127.0.0.1/vaultwarden/这样Vaultwarden会生成绝对路径的静态资源链接,不管你访问带不带尾斜杠,资源请求路径都是正确的,从根源上解决问题。
内容的提问来源于stack exchange,提问作者tweetysat

