BTCPay Server Nginx反向代理下Antiforgery Token无法解密如何解决
错误根因
该报错是ASP.NET Core 数据保护机制的密钥环丢失或不可访问导致:BTCPay Server 依赖 ASP.NET Core 的 DataProtection 功能加密防伪令牌、会话 Cookie 等敏感数据,密钥默认存储在运行时目录,若部署时未做持久化、或反向代理的请求头配置错误,会导致服务无法找到对应密钥、令牌解密失败,确实会影响闪电网络地址生成、支付页面提交等依赖防伪校验的功能。
修复步骤
- 配置 BTCPay 数据持久化
如果使用官方 Docker 方案部署,需确保dataprotection目录已映射到宿主机持久化存储,Docker Compose 配置中需包含如下挂载项:
- ./btcpay/dataprotection:/root/.aspnet/DataProtection-Keys
如果是裸机部署,需确保运行 BTCPay 进程的用户对 /root/.aspnet/DataProtection-Keys 目录拥有读写权限,禁止每次重启服务时清空运行时目录。
- 修正 Nginx 反向代理请求头配置
Nginx 站点配置的 location 段必须正确传递源站域名、访问协议等信息,否则 ASP.NET Core 会判定请求为非法跨域,密钥匹配失败,需添加如下配置:
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;
配置完成后执行 nginx -s reload 重载 Nginx 配置生效。
- 重启 BTCPay 服务验证
配置修改完成后重启 BTCPay 服务,服务启动后会自动在你配置的持久化目录生成新的密钥环,清空浏览器缓存后重新访问站点测试即可。
如果是多实例部署的 BTCPay 集群,需确保所有实例共享同一个 DataProtection-Keys 目录,避免不同实例生成的密钥互不识别触发该报错。
内容的提问来源于stack exchange,提问作者CubanHodl
相关产品推荐
相关产品推荐

