当前位置:首页 > 服务器技术 > nginx

django – 注销不工作,在nginx上缓存,如何允许注销?

我已经缓存了所有内容,如果我登录到我的帐户,您将无法再注销了)退出后如何退出?我需要知道如何删除cookie和会话!当我要退出!

P.S. if i’ll disable caching on nginx level, everything works fine,
problem in nginx

nginx conf

    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    proxy_connect_timeout 5;
    proxy_send_timeout 10;
    proxy_read_timeout 10;
    proxy_buffering on;
    proxy_buffer_size 16k;
    proxy_buffers 24 16k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;

    proxy_temp_path /tmp/nginx/proxy_temp;
    add_header X-Cache-Status $upstream_cache_status;
    proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=first_zone:100m;
    proxy_cache one;
    proxy_cache_valid any 30d;
    proxy_cache_key $scheme$proxy_host$request_uri$cookie_US;

服务器conf

upstream some site {
  server unix:/webapps/some/run/gunicorn.sock fail_timeout=0;
}

server {
    listen   80;
    server_name server name;
    expires 7d;
    client_max_body_size 4G;

    access_log /webapps/some/logs/nginx-access.log;
    error_log /webapps/some/logs/nginx-error.log;
    error_log /webapps/some/logs/nginx-crit-error.log crit;
    error_log /webapps/some/logs/nginx-debug.log debug; 
    location /static/ {
        alias   /webapps/some/static/;
    }

    location /media/ {
        alias   /webapps/some/media/;
    }
    location ~* ^(?!/media).*.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)${
        root root_path;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        access_log off;
    }    
    location ~* ^(?!/static).*.(?:css|js|html)${
        root root_path;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        access_log off;
    }     

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache one;
        proxy_cache_min_uses 1;
        proxy_cache_use_stale error timeout;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # proxy_set_header X-Forwarded-Proto https;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://some;
            break;
        }
    }
    error_page 404 /404.html;
    location = /error_404.html {
        root /webapps/some/src/templates;
    }

    error_page  500 502 503 504 /500.html;
    location = /error_500.html {
        root /webapps/some/src/templates;
    }
}

解决方法:

而不是使用GET请求注销,更改您的注销视图以接受表单POST.

不应缓存POST请求.

这具有额外的安全优势,可防止用户使用iframe或恶意链接注销(例如:https://example.com/logout/,假设您尚未禁用django的CSRF保护).

注意:有一个ticket on django’s bug tracker related to this issue.


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!