Nginx bad gateway (502) 错误在 django 500 错误上(而不是显示 django 500 页面)且 DEBUG = False 设置

Nginx bad gateway (502) 错误在 django 500 错误上(而不是显示 django 500 页面)且 DEBUG = False 设置

我当前的设置有问题...问题是,如果我在 django settings.py 文件中设置 DEBUG = False,nginx 将停止显示 500 错误上的 django 回溯,但也不会显示我们的 500 页面。它只显示 nginx 502 错误网关错误。

我确实收到了带有回溯的电子邮件错误,正如我已将其配置为在发生回溯时通过电子邮件将错误发​​送给我一样。但我想向用户显示漂亮的 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。

相关内容