Hi!请登陆

使用nginx_fastcgi_cache的时候关于Cookie的处理

2020-10-24 42 10/24

本站使用了fastcgi_cache来缓存所有页面,导致了一个问题,那就是set-cookie也被缓存了,其他用户再次访问会导致被设置缓存的cookie,最终需要实现的效果如下

在缓存miss/bypass的状态下,输出set-cookie
在缓存hit的状态下,丢弃set-cookie
miss:首次访问,无缓存
bypass:条件不符,跳过缓存
hit:缓存命中

要达到这种效果,目前nginx的fastcgi_cache没有给出解决方案,要么就是直接丢弃所有的cookie

fastcgi_hide_header "Set-Cookie";

这样导致了所有cookies全部被丢弃,造成无法登陆等问题

解决方法
查阅了一下,发现了解决方法,那就是使用nginx_lua模块实现

在server段外增加

fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
map $upstream_bytes_received $hide_cookie {default '';'' Set-Cookie;}

在server段内增加

header_filter_by_lua_block {
   ngx.header[ngx.var.hide_cookie] = nil;
}

完美实现

相关推荐