mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7mobile wallpaper 8mobile wallpaper 9mobile wallpaper 10mobile wallpaper 11mobile wallpaper 12mobile wallpaper 13mobile wallpaper 14mobile wallpaper 15mobile wallpaper 16mobile wallpaper 17mobile wallpaper 18mobile wallpaper 19mobile wallpaper 20mobile wallpaper 21mobile wallpaper 22
1588 字
4 分钟
Vaultwarden 客户端和扩展无法登录、附件 Failed to fetch 的排查与修复
2026-06-15

本文中的域名、IP 地址、路径、Token 等信息均已脱敏处理。

最近给新设备安装 Vaultwarden 浏览器扩展和客户端时,发现了一个奇怪的问题。

网页版能够正常访问登录,但浏览器扩展和客户端始终无法登录。后来又发现密码库中的附件无法下载,提示:

Failed to fetch

浏览器控制台里还能看到类似错误:

net::ERR_EMPTY_RESPONSE

相比扩展登录失败,我更担心附件下载的问题。

账号密码至少还能记住一部分,但附件里存放的各种密钥文件、备份文件和配置文件显然不可能靠脑子记住。如果附件真的出了问题,那麻烦就大了。

于是开始排查。


现象确认#

最开始我以为只是输错密码。

因为问题最早出现在新设备安装扩展之后。

扩展输入:

自托管服务器地址
邮箱(账号)
主密码

之后提示登录失败。

但网页版却能正常访问登录下载附件。

刚开始没太在意,以为是扩展的问题。

直到后来需要通过拓展下载一个附件时发现:

Failed to fetch

而且所有附件都无法下载。(什么?你说网页版不是可以用吗?可那还是太麻烦了了嘛,哪有拓展来得快)

这时候基本可以确定:

问题不是密码输错那么简单。


先检查 Vaultwarden 本身#

由于官方论坛里有人遇到过类似问题,并通过升级版本解决。

所以第一反应是:

是不是版本问题。

先查看当前容器情况:

docker inspect vaultwarden

从输出里可以看到当时运行的是:

Version 1.35.8

于是决定升级试试。

先停止并删除旧容器:

docker stop vaultwarden
docker rm vaultwarden

拉取最新镜像:

docker pull vaultwarden/server:latest

然后重新创建容器:

docker run --name=vaultwarden \
-v /path/to/vaultwarden-data:/data \
-p 8080:80 \
-e SIGNUPS_ALLOWED=false \
--restart unless-stopped \
-d vaultwarden/server:latest

确认版本已经变成:

Version 1.36.0

然而问题依旧。

扩展仍然无法登录。

附件仍然无法下载。

说明升级不是根本原因。


直接测试附件接口#

接下来决定绕过浏览器。

既然浏览器提示下载失败,那就直接请求附件下载接口看看。

首先从浏览器开发者工具中复制真实下载地址。

地址大致类似:

https://vaultwarden.example.com/attachments/<attachment-id>?token=<token>

第一次在 Windows CMD 中测试:

curl -v "https://vaultwarden.example.com/attachments/<attachment-id>?token=<token>"

结果直接报错:

URL rejected
Port number was not a decimal number between 0 and 65535

后来发现是 Windows 下命令行对 URL 中特殊字符处理的问题。

于是改用 PowerShell:

Terminal window
curl.exe -v "https://vaultwarden.example.com/attachments/<attachment-id>?token=<token>" `
--output downloaded_attachment.bin

这次返回:

HTTP/1.1 200 OK
Content-Length: 5793

文件成功下载。

而且大小完全正确。

这一步其实非常关键。

因为它证明了一件事:

Vaultwarden 容器本身没有问题,附件文件也没有损坏。

既然服务端能够正常返回文件,那么问题大概率出在:

  • 反向代理
  • Vaultwarden 外部 URL 配置
  • 浏览器扩展与服务端之间的交互
  • 客户端自身的问题

而不是数据本身。


检查 DOMAIN 配置#

Vaultwarden 官方文档里提到过一个环境变量:

DOMAIN

于是进入容器查看:

docker exec vaultwarden env | grep DOMAIN

结果什么都没有输出:

说明根本没配置。

这时候开始怀疑:

是不是 Vaultwarden 在生成下载链接或者身份验证 Token 时用了错误的地址。

于是重新创建容器。

增加:

-e DOMAIN="https://vaultwarden.example.com"

完整命令类似:

docker run --name=vaultwarden \
-v /path/to/vaultwarden-data:/data \
-p 8080:80 \
-e SIGNUPS_ALLOWED=false \
-e DOMAIN="https://vaultwarden.example.com" \
--restart unless-stopped \
-d vaultwarden/server:latest

容器启动正常。

但问题依然没有完全解决。

于是继续往反向代理方向排查。


检查 Nginx 反向代理#

我的架构大致如下:

公网
路由器端口转发
宝塔 Nginx
Vaultwarden 容器

查看 Nginx 配置后发现:

proxy_pass http://192.168.x.x:8080;
proxy_set_header Host vaultwarden.example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

这里缺少几个比较关键的头。

尤其是:

X-Forwarded-Proto

如果这个头没有传递。

后端就无法知道:

用户访问的是 HTTPS。

还是 HTTP。

于是修改为:

proxy_pass http://192.168.x.x:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;

保存后测试配置:

nginx -t

确认无误:

nginx -s reload

重新加载。

为什么 X-Forwarded-Proto 会影响登录和附件下载?(点击展开)

实际访问链路是:

浏览器
↓ HTTPS
Nginx
↓ HTTP
Vaultwarden

对于 Vaultwarden 来说,它看到的请求来自 Nginx。

而 Nginx 与 Vaultwarden 之间使用的是 HTTP 通信。

因此如果没有:

proxy_set_header X-Forwarded-Proto $scheme;

Vaultwarden 就会认为用户是通过 HTTP 访问网站的。

这会导致它在生成某些绝对地址、下载链接或身份验证信息时使用错误的协议。

例如本应生成:

https://vaultwarden.example.com/...

结果变成:

http://vaultwarden.example.com/...

网页端大量使用相对路径,因此问题可能并不明显。

而浏览器扩展在登录验证和附件下载时会严格校验这些信息。

当协议不一致时,就可能出现:

  • 浏览器扩展或客户端无法登录
  • 附件下载 Failed to fetch
  • 控制台出现 ERR_EMPTY_RESPONSE

等现象。


问题解决#

修改完成之后。

重新安装浏览器扩展。

再次登录。

成功。

然后测试附件下载。

成功。

之前一直报错的:

Failed to fetch

也消失了。

新设备同样能够正常登录。

问题彻底解决。


根本原因分析#

后来回头看,其实问题来自两个配置缺失。

1. Vaultwarden 未配置 DOMAIN#

DOMAIN 没有设置时。

Vaultwarden 在某些场景下可能生成错误的外部 URL。

尤其是在:

  • 身份验证
  • 下载链接
  • 邮件链接

等功能中。


2. Nginx 未传递 HTTPS 协议信息#

反向代理后:

客户端 → HTTPS → Nginx
Nginx → HTTP → Vaultwarden

如果没有:

proxy_set_header X-Forwarded-Proto $scheme;

那么 Vaultwarden 看到的请求永远是:

HTTP

而不是真实的:

HTTPS

这会导致生成错误的链接和 Token 信息。

网页版由于大量使用相对路径,所以问题不明显。

浏览器扩展则更加严格,因此最先暴露问题。


总结#

最终修复实际上只有两步:

Vaultwarden#

增加:

-e DOMAIN="https://vaultwarden.example.com"

Nginx#

增加:

proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;

同时将:

proxy_set_header Host vaultwarden.example.com;

改为:

proxy_set_header Host $host;

之后:

  • 浏览器扩展恢复正常登录
  • 附件恢复正常下载
  • 新设备登录正常
  • 现有数据无需迁移

如果你也遇到:

Vaultwarden 网页正常
扩展无法登录
附件 Failed to fetch

那么建议优先检查:

  1. DOMAIN 是否配置
  2. X-Forwarded-Proto 是否传递
  3. 反向代理头是否完整

这两个地方比升级版本更值得优先排查。

我觉得我是时候该给它弄个备份了?(
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

部分信息可能已经过时

目录