我已经在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.)
我已经按照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;
}
。 CsrfViewMiddleware
和CSRF_COOKIE_SECURE
设置为 False 。我的想法和尝试都用光了。请给我建议解决方案。
谢谢
版本:
SESSION_COOKIE_SECURE
答案 0 :(得分:0)
这是auth的问题。要设置CSRF cookie,您需要使用有效用户进行身份验证的会话。我在Django(用于管理网站)中创建了一个超级用户,该用户现在可以启用cookie,并且可以发布。
之所以从未在本地开发环境中发现它,是因为它使用了以前的cookie集。清除所有cookie后,我也可以在本地重新创建此问题。