【发布时间】:2017-10-17 12:11:31
【问题描述】:
我刚刚使用 nginx 在 AWS 上部署了我的 django 项目。一切正常,除了当我尝试发出任何 POST 请求(仅通过 http)时,我收到错误:
"禁止 (403) CSRF 验证失败。请求中止。”
如果我直接使用 Django 运行我的服务器,CSRF 验证会起作用,这让我认为我没有正确设置我的 nginx.conf。
有人可以就我如何配置 nginx 以使用 csrf 提供一些指导吗?
这是我当前的配置:
#nginx.conf
upstream django {
# connect to this socket
server unix:///tmp/uwsgi.sock; # for a file socket
#server 127.0.0.1:8001; # for a web port socket
}
server {
# the port your site will be served on
listen 80;
root /opt/apps/site-env/site;
# the domain name it will serve for
server_name mysite.org
charset utf-8;
#Max upload size
client_max_body_size 75M; # adjust to taste
location /media {
alias /opt/apps/site-env/site/media;
}
location /static {
alias /opt/apps/site-env/site/static;
}
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
proxy_pass_header X-CSRFToken;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
我还在 django 设置中同时关闭了 SESSION_COOKIE_SECURE 和 CSRF_COOKIE_SECURE。
谢谢
【问题讨论】:
-
我在我的配置中使用 $http 而不是 $http_host 和 stackoverflow.com/a/15414811/808236 说 $http_host 也可能是空的。所以尝试切换到 $host 并检查。
-
@iamkhush 似乎不起作用
标签: python django nginx amazon-ec2 web-deployment