Django 与 Nginx 之间非 HTTPS 连接而导致 CSRF 验证失败(403)
我的 Django 跑在 Nginx 后面,表单模板已经添加 {% csrf_token %}
,但提交表单总是 CSRF 验证失败(403)。官方文档解释由于两者之间连接不是 HTTPS 造成的,我的 Django 或 Nginx 需要一些额外配置
版本
Django 4.0.4
报错页面
解决方法
settings.py
设置一个包含两个元素的元组——要查找的头的名称和所需的值:
1 | SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') |
Nginx 配置
在 location /
块内添加 proxy_set_header X-Forwarded-Proto https;
1 | # HTTPS server |
重启 Nginx 以使配置文件生效,我是基于 Docker 部署的,下面是重启命令:
1 | # nginx 是容器名称 |