我当前的设置有问题...问题是,如果我在 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 字节?
是的,这里没有 nginx 问题,问题是 Django 什么都不返回,而是返回 500 错误页面。
使用此处记录的 nginx 的 error_page 指令
Nginx 将拦截来自后端的 5XX 错误,并向最终用户显示您喜欢的任何页面。
我最近遇到了同样的问题。我解决这个问题的方法是将这些添加到 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。