Ошибка Nginx bad gateway (502) при ошибках django 500 (вместо отображения страницы django 500) с настройкой DEBUG = False

Ошибка Nginx bad gateway (502) при ошибках django 500 (вместо отображения страницы django 500) с настройкой DEBUG = False

У меня проблема с моей текущей настройкой... И проблема в том, что если я устанавливаю DEBUG = False в файле django settings.py, nginx перестает показывать трассировки django при ошибках 500, но и не показывает нашу страницу 500. Он просто отображает ошибку nginx 502 bad gateway.

Я получаю ошибку электронной почты с трассировкой, так же как я настроил ее, чтобы отправлять мне трассировки, когда они происходят. Но я хочу отображать пользователям красивую страницу 500, а не ошибку шлюза nginx 502...

Честно говоря, я даже не знаю, с чего начать поиск корня проблемы. Я готов выложить все необходимые файлы конфигурации, если какой-нибудь эксперт по nginx придет и скажет мне, что он хочет увидеть.

Алан

Редактирование 1: Я посмотрел, что показывает файл журнала при одной из этих 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 Server Error"

Один из них — перехват исключений из django, даже если DEBUG=false. а другой — перенаправление запроса в определенный файл, чтобы клиент не видел страницу, полную исключений django, а вместо этого видел сообщение «мы сожалеем бла-бла». Имейте в виду, что версия uwsgi, которую я использую, — 1.9.15.

Связанный контент