Discourseで二重Nginxエラーが発生しました:`discourse-common/lib/raw-handlebars`からインポートされたモジュール`handlebars`が見つかりません

こんにちは!
私のウェブサイトはDiscourseのバージョン2.9を使用しています。何らかの理由で、Discourseに二重のNginxを使用する必要がありました。2つのweb_onlyコンテナノードをデプロイし、それらの前にNginxをプロキシとして使用しました。私のシステムアーキテクチャ図:

カスタムNginxが2つのweb_onlyコンテナノードをプロキシし、ランダムにリクエストをいずれかのweb_onlyノードに分散させたところ、Discourseのウェブサイトが時々「discurse-common/lib/raw-handlebarsからインポートされたモジュール’handlebars’が見つかりません」というエラーを報告し、この時ブラウザでサイトを訪問すると真っ白になるという状況に困惑していました。しかし、カスタムNginxを使用してすべてリクエストを1つのweb_onlyノードにのみ転送したところ、このエラーは発生しませんでした。この問題について検索したところ、以前にこの同じエラーを解決するためのコミットがいくつかあったことを確認し、私のバージョンにはそれらのコミットコードが含まれていることを確認しました。

Could not find module 'handlebars' imported from 'discourse-common/lib/raw-handlebars'

Broken instance after updating to 2.9.0.beta2 - #11 by david

どなたか理由をご存知でしょうか? どうもありがとうございます。

ちなみに、二重のnginxを使用すると、実際のユーザーIPアドレスを取得できない問題が発生します。
これは、カスタムnginxがクライアントIPアドレスを取得するためにX-Forwarded-Forヘッダーフィールドを有効にしているが、ディスコースのnginxのX-Forwarded-Forを無効にしていないためです。これにより、カスタムnginxのX-Forwarded-For構成がディスコースのnginxによって上書きされてしまいます。

そして、どちらを使用しても関係ありませんか?そして、それらは同じイメージを実行していますか?それは不可解です。

同じホストでそのような2つのコンテナを実行する唯一の利点は、ダウンタイムなしのアップグレードを可能にすることです。それほど頻繁にアップグレードしていないため、不要な複雑さがあるようです。

web_only.ymlに次のようなものが必要です。

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

ご返信ありがとうございます。

はい、どちらを使っても問題ありません。それらは同じ web_only イメージを実行しています。セーフモードで問題を調査し続け、結論が出たらここに報告します。

システムアーキテクチャ図での誤解を招いて申し訳ありません。web_only をデプロイするために別のマシンを使用しました。二重の web_only を使用している理由は、以前、web_only コンテナが接続数が多すぎてクラッシュしたことがあったのですが、その時点では原因を特定できませんでした。そのため、同じ問題が再発しないように、二重の web_only を試しました。

ありがとうございます。これにより、実際のユーザー IP を取得する問題が解決しました。

「いいね!」 1

なるほど。

接続数を増やす設定があります。

アップグレードすることをお勧めします。そのバージョンには何らかの問題があるはずで、それ以降、多くのセキュリティ問題が修正されていると確信しています。

「いいね!」 1

ありがとうございます。現在でも、セーフモードでデバッグを試みると同じエラーが発生します。ディスコースのアップグレードを試して、機能するか確認します。

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.