nginxで502エラー

こんにちは、

./launcher rebuild app を実行しましたが、明らかなエラーは見られませんでした。しかし、サイトを開こうとすると 502 エラーが表示されます。

nginx のエラーログ(shared/standalone/log/var-log/nginx/error.log)には以下が表示されています:

2020/08/12 05:47:43 [error] 653#653: *7 connect() failed (111: Connection refused) while connecting to upstream, client: [...], server: _, request: "GET / HTTP/2.0", upstream: "http://127.0.0.1:3000/", host: "[...]"

Discourse と nginx の 502 エラーに関するトピックをすべて確認しましたが、私のケースに当てはまるような情報が見つからず、理解もできませんでした。

これは関連するかもしれませんが、コンテナ内から実行した結果:

# netstat -plant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      644/nginx: master p 
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      644/nginx: master p 
tcp6       0      0 :::6379                 :::*                    LISTEN      -                   
tcp6       0      0 :::5432                 :::*                    LISTEN      -

ポート 3000 で何か実行されているべきでしょうか?

この問題をデバッグするために、どこを調べればよいかご教示いただけますでしょうか?

pura vida :slight_smile:

コンテナ内のサービスが起動しているため、最初は 502 エラーが表示されます。30 秒以内に解消されるはずです。解消されない場合、サーバーの CPU が過負荷状態になっており、それが処理の遅延を引き起こしている可能性があります。

「いいね!」 3

@itsbhanusharma ありがとうございます。

./launcher restart app を実行し、top で負荷を監視したところ、10% を大きく下回っています。

CPU はこの負荷を処理するのに十分だと考えられます。

$ cat /proc/cpuinfo  | grep 'name' | uniq
model name      : Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz
$ cat /proc/cpuinfo  | grep process | wc -l
4

コンテナの起動をデバッグするより良い方法はありますか?
ほかにアイデアはありますか?

「いいね!」 1

どのプラグインがインストールされていますか?このサーバーはSSDですか?

リポジトリをクローンし、セットアップコマンドを実行したばかりなので、デフォルトのプラグインしかないのでしょうか?確認場所がわかりませんが、追加したプラグインはないはずです。

サーバーは SSD ではありません。

こんにちは @elopio

機密情報を含まない形で、あなたの’yml’ファイルを投稿していただけませんか?

はい、こちらです:

Discourse は SSD を必要とし、通常の回転式ドライブでは十分な IOPS を提供できません。

それが502エラーの原因ですか?それともSSDがなくてもウェブサイトは動作するが非常に遅い状態になるべきでしょうか?

従来のハードドライブとSSDの違いが502エラーを引き起こすことはありえません。@elopio さんの質問からすると、それは現実的ではないと思います。

参考になるかもしれない小さな解説をご紹介します:

私の考えでは、最も良い方法は、いくつかのターミナルを開いて、Rails と nginx のログファイル(エラーログとアクセスログを含む)に対して tail -f を実行することです。その後、アクセスを試み、502 エラーが表示された際に、ログファイルの末尾を注視していることを確認してください。

そのログファイルの保存場所と、ターミナルで tail -f コマンドを実行する方法をご存知ですか?


なお、以前こうお尋ねでした:

Rails は Docker コンテナ内でポート 3000 で動作しており、そのポートはコンテナの外には公開されていません。そのため、コンテナの外で netstat を実行しても、ポート 3000 は表示されないのです。

参考になれば幸いです。

経験上、低速な IO は確かにタイムアウトや 502 エラーの原因となります。

SSD レベルの IOPS は必須要件です。

やったー!Railsのログを見てみると、Unicornのログが巨大で、いくつかの権限エラーを報告していました。rm -rf tmp/cache/bootsnap-compile-cache/を削除したら、おめでとうございます画面が表示されました!!!

みなさん、ありがとうございます。もう少し試してから、SSDサーバーで再構築するか検討します。

「いいね!」 4

どういたしまして、@elopio さん

ログから問題を見つけ出し、解決できてよかったです。お疲れ様でした。

今後の円滑な運用をお祈りしています!

「いいね!」 1

よし、これは完璧に機能しています。私たちが何をしているかをご紹介します:

https://bunqueer.jaquerespeis.org/

これは、コスタリカのハッカースペースを Telegram から Discourse へ移行させたものです :slight_smile: まだやるべきことは山ほどありますが、今回は間違いなくチャットを完全に廃止できると思います。Discourse の皆さん、本当にありがとうございます!

「いいね!」 2

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