在生产环境关闭 Django Debug 模式的核心操作是将 settings.py 中的 DEBUG 设置为 False,并配置 ALLOWED_HOSTS。该操作适用于所有正式上线的 Django 项目,风险边界在于关闭后详细错误页面不再显示,需确保日志系统已就绪。
先说结论:必须将 DEBUG 设置为 False 并正确配置允许的主机列表,否则 Django 会拒绝请求或暴露敏感信息。
- 先判断:确认当前部署环境是否为生产环境,检查 settings.py 中 DEBUG 变量状态。
- 优先做:修改 DEBUG 为 False,填写 ALLOWED_HOSTS,配置静态文件服务。
- 再验证:访问不存在页面触发 500 错误,确认不显示调试 traceback 信息。
命令速用版
通过环境变量或配置文件快速检查当前 Debug 状态。
python manage.py shell -c "from django.conf import settings; print(settings.DEBUG)"
为什么会这样
Django 开启 Debug 模式会在报错时展示完整的堆栈跟踪和配置信息,攻击者可利用这些数据探测系统漏洞。
官方安全清单明确指出,生产环境必须关闭 Debug 模式,防止敏感设置泄露和潜在的执行风险。
分步处理
步骤 1:修改配置文件
打开项目 settings.py,找到 DEBUG 配置项,将其值改为 False。
DEBUG = False
步骤 2:配置允许主机
当 DEBUG 为 False 时,Django 要求必须设置 ALLOWED_HOSTS,否则所有请求返回 400 Bad Request。
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com', '127.0.0.1']
步骤 3:收集静态文件
关闭 Debug 后,Django 不再自动服务静态文件,需运行 collectstatic 并由 Nginx 或 Apache 托管。
python manage.py collectstatic
怎么验证是否生效
访问一个不存在的 URL 触发 500 错误,观察页面是否显示默认的友好错误页而非详细 traceback。
检查 HTTP 响应头,确认不再包含服务器详细版本信息或调试相关标识。
常见坑
ALLOWED_HOSTS 留空会导致生产环境所有请求被拒绝,必须显式填写域名或 IP。
关闭 Debug 后未配置日志收集,导致线上报错无法排查,需配置 logging 模块或接入 Sentry 等工具。
常见问题
关闭 Debug 模式会影响网站性能吗
会轻微提升性能,因为不再生成详细错误页面和调试信息,但主要目的是安全而非加速。
关闭后如何查看线上报错信息
需配置日志文件记录错误或集成错误监控服务,通过日志而非浏览器页面查看堆栈。
参考来源
- Django Documentation, Security Checklist, https://docs.djangoproject.com/en/stable/topics/security/
- Django Documentation, Settings DEBUG, https://docs.djangoproject.com/en/stable/ref/settings/#debug