未设置Django,nginx和gunicorn csrf cookie

时间:2018-08-11 16:40:42

标签: django docker nginx gunicorn

我已经在docker容器上运行了nginx,gunicorn和Django的安装程序。 Nginx用作反向代理。 一切正常,但是对于POST方法,我收到错误消息Data too long for column c_first_name at row 1。相同的配置在本地可以正常运行,但在生产环境(aw2上为EC2)上,则无法使用。

这是nginx的配置:

Forbidden (CSRF cookie not set.)

我检查了请求标头,但未设置cookie。 enter image description here

我已经按照SO中的建议尝试了一切。我在Django设置的中间件中设置了upstream web { ip_hash; server web:8000; } server { location / { alias /src/frontend/dist/; try_files $uri $uri/ /index.html; } location /static { alias /src/static/; try_files $uri =404; } # works locally, but doesn't work in prodcution on ec2 location /api/ { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://web; # pass to gunicorn # what to serve if upstream is not available or crashes # error_page 500 502 503 504 405 /error.html; } location @rewrites { rewrite ^(.+)$ /index.html last; } listen 80; server_name www.example.com; } CsrfViewMiddlewareCSRF_COOKIE_SECURE设置为 False 。我的想法和尝试都用光了。请给我建议解决方案。

谢谢

版本:

SESSION_COOKIE_SECURE

1 个答案:

答案 0 :(得分:0)

这是auth的问题。要设置CSRF cookie,您需要使用有效用户进行身份验证的会话。我在Django(用于管理网站)中创建了一个超级用户,该用户现在可以启用cookie,并且可以发布。

之所以从未在本地开发环境中发现它,是因为它使用了以前的cookie集。清除所有cookie后,我也可以在本地重新创建此问题。