登录后用户特定的 502 错误——追溯到 DiscourseUpdates.has_unseen_features?

您好,

我遇到了一个奇怪的问题,我的 Discourse 在仅针对一个特定用户(管理员)账户登录后出现 502 错误,而:

  • 匿名用户可以正常访问网站

  • 其他用户账户可以正常登录和使用网站

  • 问题仅出现在**一个特定账户(管理员账户)**上


:puzzle_piece: 环境

  • 通过官方 Docker 设置安装的 Discourse

  • 反向代理/CDN:ArvanCloud(类似于 Cloudflare)

  • 访问国际互联网受限/不稳定(GitHub 和一些外部服务无法访问)

  • Discourse 大约 1 个月没有更新


:red_exclamation_mark: 症状

访问网站时:

  • 如果我在隐私/无痕模式下打开网站 → 网站加载正常

  • 如果我使用我的主账户登录 → 立即出现 502 Bad Gateway

  • 如果我使用另一个账户登录 → 一切正常

因此,问题显然是特定于用户且在身份验证后触发的。


:page_facing_up: 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 的响应,但后端超时或关闭了连接。


:magnifying_glass_tilted_left: 我在后端发现了什么

在 Rails 堆栈跟踪中,错误路径指向:

  • current_user_serializer.rb

  • discourse_updates.rb

  • 方法:DiscourseUpdates.has_unseen_features?

这表明崩溃/超时发生在检查登录用户的新功能公告

由于只有一个用户受到影响,这强烈表明问题是在用户特定序列化期间触发的,而不是全局站点渲染。


任何指导都将不胜感激。
非常感谢。

您是否在其他浏览器/设备上尝试过?您是否尝试禁用浏览器的扩展程序?

编辑:也许我误解了。网站在无痕模式下并且以用户身份登录时是否可以加载?

是的,我在多台设备和浏览器上都进行了测试,这与浏览器扩展无关:

我看到的情况是用户特定的,而不是设备特定的:

  • 管理员帐户已登录的任何设备上,打开网站会立即导致 502 Bad Gateway(错误网关)。

  • 隐身/私密模式下,网站可以正常加载,我可以到达登录页面。

  • 从那里,我可以使用另一个(非管理员)帐户成功登录,并且网站运行正常。

  • 但是,当我尝试使用管理员帐户登录时,在提交电子邮件和密码后,我总是会收到 502 错误,并且页面从未加载。

1 个赞