502 Bad Gateway および Discourse version NOT FOUND

CentOS 7 に Discourse をインストールする手順に従いました。

メールの設定は正しく行い、テストメールも受信できました。しかし、常に 502 Bad Gateway エラーが発生します。

以前は ssl_stapling の問題がありましたが、完全なチェーン証明書ファイルを含めることで解決しました。

Docker アプリがカスタムポート 25654 でリッスンしていることが確認できます:

0.0.0.0:25654->80/tcp, :::25654->80/tcp

Discourse アプリがリッスンしていないことが原因だと考えられる、以下の nginx エラーが発生しています。

connect() failed (111: Connection refused) while connecting to upstream, client: x.x.x.x, server: xxxx, request: “GET / HTTP/2.0”, upstream: “http://x.x.x.x:25654/”, host: “xxxx”

[MY_DOMAIN].net および discourse.[MY_DOMAIN].net の両方の DNS エントリが正しい IP アドレスを指すように設定しています。

「いいね!」 1

メタ・ディスコース・コミュニティへようこそ :slightly_smiling_face:

私はよく Let’s Encrypt Community で SSL 設置の問題を支援しています。気づいたのですが、2 つ目のサーバーブロックに IPv6 の listen 文が欠落しています:

listen [::]:443 ssl http2;

これがなければ、IPv6 トラフィックがどこに到達するか分かりません。

:man_shrugging:

「いいね!」 1

ジョナサン、どうもありがとうございます。これにより「接続が拒否されました」という問題が解決しました。

次に、DiscourseのURLにアクセスすると「CentOSへようこそ」ページにリダイレクトされ、以下のエラーログが表示されます。

nginx settings2

Discourse doctorではまだ「バージョンが見つかりません」と表示されています。

「いいね!」 1

netstat を確認したところ、ポート 25654 に対して tcp と tcp6 の 2 つの docker-proxy プロセスが実行されているようです。他のチュートリアルのスクリーンショットではこのような表示が見られないため、これが問題なのか気になります。

CentOS では異なる設定が必要と思われるため、以下のチュートリアルに記載されている Nginx の設定に従いました。

また、MYDOMAIN.netdiscourse.MYDOMAIN.net を同じマシン上で Nginx を通じて動作させたいと考えているため、以下のチュートリアルで確認した内容に基づき、app.yml および Nginx 設定にもいくつか追加の変更を加えました。

例えば、WebSocket テンプレートを有効化しています。

しかし、そのチュートリアルのコメントで、「ソケットを使用する場合は、公開されているすべてのポートの記述をコメントアウトする必要がある」という記述を見つけました。一方、最初の設定では「25654:80」というエントリが追加されており、Nginx が 25654 ポートに転送したトラフィックを受信するように設定されていました。

基本的な設定の問題であれば申し訳ありません。ポート転送やソケット、一般的なネットワーク設定については私の得意分野ではありません。

「いいね!」 1

これらは高度な設定です。リバースプロキシの設定や Docker の管理に不慣れな方にとっては、当サイトの唯一公式Discourse 標準インストール に従うことをお勧めします。これは、新しいサーバーで Discourse だけが Web アプリとして動作していることを前提としています。

「いいね!」 3