サイトが502 Bad Gatewayを返すのはRubyのせい?

Discourse インスタンスは少なくとも 3 年間稼働していましたが、昨日、ドメイン変更が反映されることを期待して誤ってインスタンスを再起動してしまいました。現在はインスタンスが起動しており、nginx が外部からのリクエストを受信していることは確認できますが、すべての訪問者が常に「502 Bad Gateway」エラーを受け取っています。以下は nginx エラーログの一例です:

2020/06/22 19:03:26 [error] 11742#11742: *158 connect() failed (111: Connection refused) while connecting to upstream, client: 162.158.159.12, server: <my domain>, request: "GET                / HTTP/1.1", upstream: "http://127.0.0.1:3000/", host: "<my domain>"

Docker 外部に Web サーバーは存在しないため、app.yml ファイルではポート 80 と 443 をコンテナに転送する設定になっています。では、ポート 3000 には何が動作しているはずなのでしょうか?Ruby / Rails であるべきでしょうか?

こんにちは、クリスさん:

はい、その通りです。

Discourse アプリでは、Rails はポート 3000 で動作します。

Rails の状態を確認するために、アプリ内の Rails ログをチェックしてみることをお勧めします。

少しでもお役に立てれば幸いです。

インスタンスのドメイン名を変更しようとしていましたか?

そのための手順が用意されています。このプロセスを行わないと、現在お困りのようなエラーが発生する可能性があります。

このガイドに従って、ドメイン名を正しく変更してください。
Change the domain name or rename your Discourse

本番ドメインには「開発」環境の代替が存在し、何らかの理由で設定に混入してしまいました。その結果、画像を除くすべてのコンテンツは本番ドメインから取得される一方、画像のみが開発ドメインから取得される状態になっています。後者には証明書が設定されていないため、(当然ながら)クロスサイトセキュリティの問題が発生し、画像が読み込まれません。

現在、他の場所で提案されているように、コンテナの再構築を試みています。

さらに複雑な問題として、すべてのトラフィックが CloudFlare を経由しているため、SSL 証明書に関連する問題が発生しています。templates/cloudflare.template.yml がまだ機能しているかどうかはわかりません。

Let’s Encrypt で証明書を発行するには、Cloudflare を無効にする必要があります。

すべて解決しました。当社の最高峰の技術者が新しいビルドを作成し、さらにLetsEncryptの動作も確認できました!