DEBUG = False 設定で、Django 500 エラー (Django 500 ページを表示する代わりに) で Nginx 不正ゲートウェイ (502) エラーが発生する

DEBUG = False 設定で、Django 500 エラー (Django 500 ページを表示する代わりに) で Nginx 不正ゲートウェイ (502) エラーが発生する

現在の設定に問題があります...問題は、django settings.py ファイルで DEBUG = False を設定すると、nginx は 500 エラーで django トレースバックを表示しなくなりますが、500 ページも表示されません。nginx 502 bad gateway エラーのみが表示されます。

トレースバックが発生したときに、トレースバックをメールで送信するように設定しているため、トレースバックで電子メール エラーが発生します。ただし、ユーザーには nginx 502 ゲートウェイ エラーではなく、わかりやすい 500 ページを表示したいのですが...

正直に言うと、問題の根本原因をどこから探せばいいのかさえわかりません。nginx の専門家が来て、何を見たいのか教えてくれれば、必要な設定ファイルをすべて投稿する用意があります。

アラン

編集1: 500 エラーの 1 つでログ ファイルに何が表示されるかを調べたところ、次のようになりました。

[pid: 16203|app: 0|req: 1/1] my.ip.address () {46 vars in 915 bytes} [Thu Sep 12 10:01:17 2013] GET /settings/personal/ => generated 0 bytes in 1249 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)

これは、Django が 0 バイトを返したように見えるため、何らかの形で Django に問題があることを意味しますか?

答え1

これは、Django が 0 バイトを返したように見えるため、何らかの形で Django に問題があることを意味しますか?

はい、ここでは nginx の問題はありません。問題は、Django が 500 エラー ページではなく何も返さないことです。

答え2

nginxのerror_pageディレクティブを使用するここ

これにより、Nginx はバックエンドからの 5XX エラーをインターセプトし、エンド ユーザーに任意のページを表示します。

答え3

私も最近同じ問題に遭遇しました。この問題を解決するために、uwsgi の起動パラメータに次のパラメータを追加しました: –catch-exceptions および –error-route-status=”500 file:filename=/usr/local/nginx/html/index.html,status=500 Internal Server Error”

1 つは、DEBUG=false の場合でも django からの例外をキャッチすることです。もう 1 つは、リクエストを特定のファイルにリダイレクトして、クライアントが django 例外でいっぱいのページを表示しないようにし、代わりに「申し訳ありませんが、何卒」というメッセージを表示することです。使用している uwsgi バージョンは 1.9.15 であることに注意してください。

関連情報