sub2api常见报错:cookie失效、会话过期

sub2api 在长期运行中出现 cookie 失效、会话过期、频率限制 这三类报错,本质上不是程序损坏,而是你依赖的订阅源或第三方接口拒绝了当前请求。
处理逻辑可以概括为一句话:先确认凭证是否过期,再确认请求是否过频,最后用缓存和降频避免复发
本文按这个思路,带你把每个报错的原因和排查步骤理清楚,全程不需要改业务代码,零基础也能照着操作。

三个报错分别代表什么

很多用户混淆这三个报错,导致改错方向。
先从含义上把它们拆开:

  • cookie失效:sub2api 转发请求时携带的 cookie 已被订阅源服务器判为无效。常见原因是你在浏览器里重新登录过,服务端更新了会话凭证,旧 cookie 自然作废。
  • 会话过期:和 cookie 失效类似,但更偏向 token 或 session 的时效问题。比如 Surge、Mihomo 或部分机场面板签发的短期 token 到期,sub2api 仍然沿用旧值。
  • 频率限制:订阅源接口对同一 IP 或同一账号的请求次数做了限制。通常在短时间内部署多个客户端、反复刷新订阅时触发,返回 429 或类似提示。

判断方法很简单:看报错文案里有没有出现 401、403、429 这类的 HTTP 状态码,也可直接查看 sub2api 的日志文件定位是哪一层抛出的异常。

先处理 cookie 失效与会话过期

cookie 失效和会话过期属于同一类凭证问题,处理顺序基本一致。

第一步:从源站重新获取最新凭证。

打开你订阅的机场面板或服务商网站,退出登录后重新登录,在开发者工具的 Network 面板中找到任意一个 API 请求,复制请求头里的 cookie 或 Authorization 字段。
不要直接在旧 cookie 上做局部修改,服务端校验的往往是一整段签名值。

第二步:更新 sub2api 的配置。

找到 sub2api 的配置文件,把重新获取的 cookie 填入对应位置。
常见的配置方式是在环境变量或 .env 文件中定义:

SUB2API_COOKIE="你的新cookie值"
SUB2API_TOKEN="你的新token值"

填好后重启服务,使配置生效:

# Docker Compose 部署方式
sudo docker compose restart sub2api

# systemd 部署方式
sudo systemctl restart sub2api

第三步:验证凭证是否生效。

直接请求一个需要鉴权的订阅接口,看是否还返回 401:

curl -I "http://127.0.0.1:12000/sub?token=你的token"

返回 200 OK 说明凭证已更新。
若仍然报错,检查系统时间和服务器时间是否同步,时间偏差超过几分钟会导致 JWT 类 token 校验失败,可通过 NTP 同步校正:

sudo timedatectl set-ntp true

再看频率限制的触发链路

如果凭证没问题,报错仍出现,重点转向频率限制。
sub2api 触发限频通常是这几种情况:

  • 机场面板对单账号短时间内的订阅请求次数设限;
  • 多个客户端共用同一个 sub2api 地址,请求量被放大;
  • 定时任务或客户端自动刷新间隔设置过短。

处理逻辑依次有三种:

  1. 减少直接请求次数。把客户端订阅自动更新时间从每 6 小时改为每天一次,降低触发 429 的概率。
  2. 在 sub2api 和上游接口之间加缓存层。Sub-Store 本身支持缓存机制,优先开启它,让相同内容的请求命中缓存而不是打到上游。
  3. 给不同客户端分配独立的 sub2api 路径,避免共用一个地址时互相挤占限额。

同时检查 sub2api 是否自带限流配置,若部署在反向代理(如 Nginx)后面,还需确认代理层有没有额外做请求频率控制:

# 在 Nginx 站点配置中查看是否存在 limit_req 相关指令
limit_req zone=mylimit burst=5 nodelay;

如果设置了过小的 burst 或过快的速率,建议先注释掉再测试,排除代理层误伤。

避坑清单

以下问题最容易让人走弯路,提前避开能省不少时间:

  • 不要只在报错后更新 cookie。很多服务商的 cookie 有效期很短,建议把“重新获取 cookie”写进周期维护计划,比如每月一次。
  • 更新配置后务必重启服务。部分部署方式不会热加载新配置,不重启会导致旧 cookie 继续被使用。
  • 别忽略时间和时区。服务器时区混乱会让 token 校验提前失败,建议统一设置为 Asia/ShanghaiUTC,不要混合使用。
  • 日志保留周期调长。sub2api 报错往往是间歇性的,保留至少 7 天日志,方便在再次报错时回溯是凭证问题还是限频问题。

验证处理结果是否稳定

处理完不要只看一次请求是否成功,建议连续验证一段时间:

# 连续请求 10 次,观察是否存在 401、403、429
for i in $(seq 1 10); do
  curl -o /dev/null -s -w "%{http_code}\n" "http://127.0.0.1:12000/sub?token=你的token"
  sleep 2
done

输出的状态码应全部为 200304,一旦出现 429,说明频率问题还没解决;
出现 401,则说明凭证仍有问题,需要回到第二步重新检查。

同时观察 sub2api 的日志,确认最近一小时内没有新增 cookie 失效或会话过期的异常记录:

journalctl -u sub2api --since "1 hour ago" | grep -E "cookie|expire|limit"

如果长时间运行后再次遇到 sub2api 的 cookie 失效、会话过期或频率限制报错,优先按本文顺序排查,不要急于重装服务或修改业务代码;
多数情况下,更新凭证和调整请求频率就能稳定恢复。

分享到:
上一篇
慢查询批量优化脚本解决数据库卡顿查询缓慢
下一篇
AI中转业务合规风险梳理,日志留存、用户协议
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意