You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加SSL后Django Admin出现CSRF Token验证错误的解决求助

修复Django Admin启用SSL后的CSRF Token错误

问题根源

启用SSL后,Django无法正确识别当前请求的HTTPS协议环境,导致CSRF Cookie的安全属性不匹配、请求来源验证失败;同时Nginx反向代理未传递必要的协议头,进一步触发该问题。

修复步骤

1. 更新Nginx配置,补充HTTPS协议头

在Nginx的@proxy_to_app location块中,添加X-Forwarded-Proto头,告知Django当前请求使用HTTPS:

location @proxy_to_app {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  # 新增该行,传递HTTPS协议标识
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_redirect off;
  proxy_pass http://app_server;
}

2. 调整Django项目settings.py配置

修改以下核心配置项:

  • 信任反向代理的SSL头:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

让Django识别Nginx传递的HTTPS协议信息。

  • 设置安全Cookie属性:
# 强制Session Cookie仅通过HTTPS传输
SESSION_COOKIE_SECURE = True
# 强制CSRF Cookie仅通过HTTPS传输
CSRF_COOKIE_SECURE = True
  • 更新ALLOWED_HOSTS:
    确保你的域名在允许列表内:
ALLOWED_HOSTS = ['example.com', 'www.example.com']
  • 添加信任的CSRF来源(Django 3.0及以上版本):
    针对域名跳转场景,配置信任的HTTPS来源:
CSRF_TRUSTED_ORIGINS = ['https://example.com', 'https://www.example.com']

3. 重启服务生效

修改配置后,依次重启Nginx和Gunicorn:

# 重启Nginx
sudo systemctl restart nginx
# 重启Gunicorn(根据实际服务名调整)
sudo systemctl restart gunicorn

额外验证

  • 彻底清除浏览器Cookie与缓存,避免旧的非安全Cookie干扰
  • 确认SSL证书配置正常,无证书信任或域名不匹配问题

内容的提问来源于stack exchange,提问作者Maddie Graham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:40:31