能否通过Nginx开启Django的DEBUG模式?开DEBUG后仍显500错误如何解决
Django开启DEBUG模式不生效排查配置方案
1 核实Django核心配置项
- 确认
settings.py中DEBUG = True未被生产环境配置分支覆盖,不要放在if ENV == 'prod'这类条件判断的否定分支下 - 检查
ALLOWED_HOSTS配置,必须包含当前访问使用的域名或IP,例如用10.0.0.5访问时需配置ALLOWED_HOSTS = ['10.0.0.5', '你的正式域名'],DEBUG模式下ALLOWED_HOSTS不匹配会直接返回通用错误页,不会展示调试栈
2 重启服务使配置生效
修改Django配置后必须重启Gunicorn进程才会生效,不要仅重启Nginx:
- 若用systemd管理Gunicorn,执行
systemctl restart 你的Gunicorn服务名 - 若用supervisor管理进程,执行
supervisorctl restart 你的项目进程名
3 排查上层服务的错误页拦截
- 检查Nginx配置是否存在自定义500错误页规则,类似
error_page 500 502 503 504 /50x.html;的配置会优先返回Nginx默认错误页,临时注释该配置并执行nginx -s reload重启Nginx后再测试 - 检查Gunicorn启动参数,确认未通过环境变量强制覆盖DEBUG值,若启动命令或服务配置中有
DJANGO_DEBUG=False的变量声明,需修改为True后重启Gunicorn
4 兜底日志排查方案
如果调试页始终无法正常展示,可以通过日志直接获取报错信息:
- 查看Gunicorn错误日志,默认路径一般为
/var/log/gunicorn/你的项目名-error.log,会打印完整的Django报错追溯栈 - 查看Nginx错误日志
/var/log/nginx/error.log,排查是否是请求转发、权限、静态资源层面的问题 - 可临时在
settings.py中添加日志输出配置,将ERROR级别的日志写入指定文件,方便排查
重要提示:DEBUG模式仅可用于内部排查问题,问题解决后必须立刻关闭,避免代码、数据库配置等敏感信息泄露。
内容的提问来源于stack exchange,提问作者JohnShallow
相关产品推荐
相关产品推荐

