您好,
我遇到了一个奇怪的问题,我的 Discourse 在仅针对一个特定用户(管理员)账户登录后出现 502 错误,而:
-
匿名用户可以正常访问网站
-
其他用户账户可以正常登录和使用网站
-
问题仅出现在**一个特定账户(管理员账户)**上
环境
-
通过官方 Docker 设置安装的 Discourse
-
反向代理/CDN:ArvanCloud(类似于 Cloudflare)
-
访问国际互联网受限/不稳定(GitHub 和一些外部服务无法访问)
-
Discourse 大约 1 个月没有更新
症状
访问网站时:
-
如果我在隐私/无痕模式下打开网站 → 网站加载正常
-
如果我使用我的主账户登录 → 立即出现 502 Bad Gateway
-
如果我使用另一个账户登录 → 一切正常
因此,问题显然是特定于用户且在身份验证后触发的。
CDN (ArvanCloud) 错误日志
出现两个主要错误:
1. 读取上游时上游超时
upstream timed out (110: Connection timed out) while reading upstream
受影响的 URL 大多是资产,例如:
-
/assets/browser-detect-*.js
-
/assets/plugins/automation-*.js
-
/assets/plugins/discourse-gamification-*.js
-
/assets/plugins/discourse-lazy-videos-*.js
2. 上游连接过早关闭
upstream prematurely closed connection while reading response header from upstream
例如:
-
/stylesheets/common_theme_rtl_*.css
-
/theme-javascripts/*.js
所以 CDN 正在等待来自 Discourse 的响应,但后端超时或关闭了连接。
我在后端发现了什么
在 Rails 堆栈跟踪中,错误路径指向:
-
current_user_serializer.rb -
discourse_updates.rb -
方法:
DiscourseUpdates.has_unseen_features?
这表明崩溃/超时发生在检查登录用户的新功能公告时。
由于只有一个用户受到影响,这强烈表明问题是在用户特定序列化期间触发的,而不是全局站点渲染。
任何指导都将不胜感激。
非常感谢。