如果用户经过身份验证Django,则绕过nginx缓存

时间:2016-11-25 12:24:59

标签: django caching nginx

我实现了nginx作为Django项目的反向代理。我现在正在尝试实现nginx的缓存配置:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:5m max_size=1g inactive=60m;
proxy_temp_path /var/cache/nginx/tmp;

server {
  ...

  location / {
     proxy_pass http://127.0.0.1:8000;
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-Host $server_name;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';

     # cache
     proxy_cache my_cache;
     proxy_cache_min_uses 1;
     proxy_cache_valid 200 302 10m;
     proxy_cache_valid 404 1m;
     proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
     proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_cache_lock on;

     proxy_hide_header "Set-Cookie";

     add_header X-Proxy-Cache $upstream_cache_status;
  }
}

一切都很好,但我喜欢它,以便经过身份验证的用户可以绕过缓存,否则当他们更新网站内容时,他们将无法看到更改,只有缓存的内容才会它过期了。

最好的方法是什么?

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

添加中间件以设置cookie(例如cachedisable)作为响应,如果用户被验证,则删除该cookie。这样你就可以把$cookie_ cachedisable放在nginx conf

location / {
    proxy_cache_bypass $cookie_cachedisable $arg_nocache;
    ...
}

每当你想要旁路缓存做请求时,如

http://www.example.com/?nocache=true #or if cookie `cachedisable` is present 

了解更多信息https://www.nginx.com/blog/nginx-caching-guide/?utm_source=nginx-caching-guide&utm_medium=blog#caching-guide-faq-hole-punch