一、为什么需要生产环境配置

当你用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合规的支付系统

注意事项

  1. 每次修改配置后务必测试:
    python manage.py check --deploy
    
  2. 备份数据库前关闭连接池
  3. 安全头部可能导致部分浏览器功能异常

总结

生产环境配置就像给网站穿上防弹衣,既要挡子弹(安全)又要跑得快(性能)。记住三个核心:

  1. 所有敏感信息必须隔离
  2. 静态资源交给专业选手(Nginx/CDN)处理
  3. 监控系统是运维人员的眼睛

最后送大家一个检查清单:

  • [ ] DEBUG模式已关闭
  • [ ] 配置了正确的ALLOWED_HOSTS
  • [ ] 数据库连接池已启用
  • [ ] 错误监控系统接入