Nginx bad gateway (502) error on django 500 錯誤(而不是顯示 django 500 頁面),DEBUG = False 設置

Nginx bad gateway (502) error on django 500 錯誤(而不是顯示 django 500 頁面),DEBUG = False 設置

我目前的設定有問題...問題是,如果我在 django settings.py 檔案中設定 DEBUG = False,nginx 會停止顯示 500 錯誤的 django 回溯,但也不顯示我們的 500 頁面。它只顯示 nginx 502 bad gateway 錯誤。

我確實收到了帶有回溯的電子郵件錯誤,就像我將其配置為在發生回溯時將其通過郵件發送給我一樣。但我想向用戶顯示漂亮的 500 頁面而不是 nginx 502 網關錯誤...

老實說,我甚至不知道從哪裡開始尋找問題的根源。如果有 nginx 專家來告訴我他想看到什麼,我準備發布所有必要的設定檔。

艾倫

Edit1:我查找了日誌檔案在這 500 個錯誤之一中顯示的內容,它顯示了以下內容:

[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 錯誤導致它看起來像 django 返回 0 個位元組?

答案1

這是否意味著它的某種 django 錯誤導致它看起來像 django 返回 0 個位元組?

是的,這裡沒有 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伺服器錯誤”

一種是從 django 捕獲異常,即使 DEBUG=false 也是如此。另一個將請求重定向到特定文件,以便客戶端避免看到充滿 django 異常的頁面,而是看到「我們很抱歉等等」訊息。請記住,我使用的 uwsgi 版本是 1.9.15。

相關內容