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

Django生产环境表单提交出现CSRF验证失败403错误求助

解决Django生产环境CSRF 403错误的方法

1. 修改Django的settings.py配置

问题核心是你的域名未被加入Django的可信来源列表,直接修改settings.py里的两个关键配置项:

  • 确保ALLOWED_HOSTS包含你的生产域名和EC2实例IP:
ALLOWED_HOSTS = ['winni-furnace.ca', 'www.winni-furnace.ca', '你的EC2公网IP']
  • 添加CSRF_TRUSTED_ORIGINS,把HTTPS域名加入信任列表:
CSRF_TRUSTED_ORIGINS = ['https://winni-furnace.ca', 'https://www.winni-furnace.ca']

如果你的域名有www前缀,两个域名都要添加,避免遗漏。

2. 调整Nginx配置传递正确请求头

确保Nginx把请求的协议和主机信息正确传递给Django,在Nginx的server块中添加以下配置:

location / {
    proxy_pass http://127.0.0.1:8000; # 这里替换成你实际的gunicorn监听地址
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme; # 关键:告诉Django请求用的是HTTPS
}

修改完成后重启Nginx生效:

sudo systemctl restart nginx

3. 重启Gunicorn服务

修改settings.py后,必须重启Gunicorn让新配置生效:

sudo systemctl restart gunicorn # 服务名根据你实际的配置调整,比如可能是gunicorn.service

4. 额外验证点

如果仍有问题,检查以下内容:

  • 确认模板里的{% csrf_token %}确实写在<form>标签内部,而非外部
  • 打开浏览器开发者工具,查看请求Cookie中是否存在csrftoken,请求头里是否携带X-CSRFToken字段

内容的提问来源于stack exchange,提问作者Pourya Mohamadi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:04:58