こんにちは。
Discourseで、ログイン後に特定の管理者アカウントでのみ502エラーが発生するという奇妙な問題に直面しています。
- 匿名ユーザーは通常通りサイトにアクセスできます。
- 他のユーザーアカウントはログインしてサイトを通常通り使用できます。
- 問題は特定の1つのアカウント(管理者アカウント)でのみ発生します。
環境
- Discourseは公式Dockerセットアップを使用してインストールされています。
- リバースプロキシ/CDN: ArvanCloud(Cloudflareに類似)
- インターネットへのアクセスは制限/不安定です(GitHubや一部の外部サービスに到達できません)。
- Discourseは約1か月間更新されていません。
症状
サイトにアクセスすると:
- プライベート/シークレットモードでサイトを開くと → サイトは正常に読み込まれます。
- メインアカウントでログインすると → すぐに502 Bad Gatewayが表示されます。
- 別のアカウントでログインすると → すべて正常に動作します。
したがって、問題は明らかにユーザー固有であり、認証後にトリガーされています。
CDN (ArvanCloud) のエラーログ
主に2つのエラーが表示されます。
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.rbdiscourse_updates.rb- メソッド:
DiscourseUpdates.has_unseen_features?
これは、クラッシュ/タイムアウトがログインユーザーの新しい機能の通知を確認している間に発生していることを示唆しています。
影響を受けているユーザーが1人だけであるため、これはグローバルなサイトレンダリングではなく、ユーザー固有のシリアライズ中に問題がトリガーされていることを強く示唆しています。
何かご指導いただけると幸いです。
よろしくお願いいたします。