一、为什么需要生产环境配置
当你用Django开发完一个网站,直接扔到服务器上运行是远远不够的。就像盖房子不能只搭框架不装门窗一样,生产环境需要安全加固和性能优化,否则可能会面临数据泄露、服务崩溃等问题。
举个简单例子:开发时用的DEBUG=True,在生产环境继续开着就会暴露敏感信息。下面是一个典型错误示范:
# 技术栈:Django 4.2
# 危险配置示例(千万别用!)
DEBUG = True # 生产环境必须关闭
ALLOWED_HOSTS = ['*'] # 相当于敞开大门让黑客进来
二、基础安全加固
1. 关闭调试模式
第一道防线就是修改settings.py:
# 技术栈:Django 4.2
# 正确配置示例
DEBUG = False # 关闭调试信息
ALLOWED_HOSTS = ['yourdomain.com', 'api.yourdomain.com'] # 只允许指定域名访问
2. 密钥管理
千万不要把SECRET_KEY写在代码里!推荐使用环境变量:
# 从环境变量读取密钥
import os
SECRET_KEY = os.getenv('DJANGO_SECRET_KEY') # 命令行设置:export DJANGO_SECRET_KEY=你的密钥
三、性能优化实战
1. 数据库连接池
Django默认每次请求都新建数据库连接,高并发时会导致性能瓶颈。用django-db-geventpool优化:
# 技术栈:Django+PostgreSQL
DATABASES = {
'default': {
'ENGINE': 'django_db_geventpool.backends.postgresql',
'POOL_SIZE': 20, # 连接池大小
'MAX_OVERFLOW': 10 # 最大溢出连接数
}
}
2. 静态文件处理
直接用Django处理静态文件会拖慢性能,应该用Nginx接管:
# Nginx配置示例
location /static/ {
alias /var/www/static/; # 静态文件目录
expires 30d; # 缓存30天
}
四、高级防护措施
1. CSRF防护强化
默认配置可能不够安全,建议增加这些设置:
# 强化CSRF防护
CSRF_COOKIE_HTTPONLY = True # 禁止JS读取
CSRF_COOKIE_SAMESITE = 'Lax' # 控制跨站发送
2. 安全头部设置
通过中间件添加安全响应头:
# 安装:pip install django-csp
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'csp.middleware.CSPMiddleware', # 内容安全策略
]
# 安全头部配置示例
SECURE_CONTENT_TYPE_NOSNIFF = True # 禁止MIME嗅探
X_FRAME_OPTIONS = 'DENY' # 禁止iframe嵌入
五、监控与日志
1. 错误监控配置
用Sentry捕获生产环境异常:
# sentry_sdk初始化
import sentry_sdk
sentry_sdk.init(
dsn="你的DSN地址",
traces_sample_rate=1.0 # 性能监控采样率
)
2. 日志分级处理
避免把所有日志都堆在一个文件:
LOGGING = {
'handlers': {
'file': {
'level': 'ERROR', # 只记录错误
'filename': '/var/log/django/error.log',
}
}
}
应用场景与技术选型
这套配置适合中小型Web应用,特别是:
- 用户量在1万~100万的电商网站
- 企业级后台管理系统
- 需要PCI DSS合规的支付系统
注意事项
- 每次修改配置后务必测试:
python manage.py check --deploy - 备份数据库前关闭连接池
- 安全头部可能导致部分浏览器功能异常
总结
生产环境配置就像给网站穿上防弹衣,既要挡子弹(安全)又要跑得快(性能)。记住三个核心:
- 所有敏感信息必须隔离
- 静态资源交给专业选手(Nginx/CDN)处理
- 监控系统是运维人员的眼睛
最后送大家一个检查清单:
- [ ] DEBUG模式已关闭
- [ ] 配置了正确的ALLOWED_HOSTS
- [ ] 数据库连接池已启用
- [ ] 错误监控系统接入
评论