Ghost配置Nginx 缓存

Ghost这个程序目前还不能直接访问静态路径文件,尝试了一下修改源代码,但是node不大会始终搞不定FileSystem。所以在node的前面放了个Nginx反代做一下Rewrite。

都说node和Nginx性能好,顺手做一下压测看看, 200个并发就有些慢了,1000直接卡死。也许是缓存没配置好吧。

找到了Nginx缓存的方法:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=webserver:20m max_size=1g;
proxy_cache webserver;
proxy_cache_valid 200 10m;

可是不清楚是否成功了,因为从Chrome里看到的页头信息Cache全是MISS的。
找到原因了,需要两个重要的属性

proxy_hide_header Set-Cookie;
proxy_ignore_headers Set-Cookie; 

作缓存就要考虑cookie,proxy_hide_header Set-Cookie;的作用是把大家看起来都一样的缓存页的Cookie隐藏掉。要不然用户打开之前管理员浏览首页而生成的缓存,会把cookie写入自己的浏览器里,这样用户直接可以登录后台了。

而Nginx考虑到这一点,默认会自动把上游页面带Cookie的不缓存,所以就需要proxy_ignore_headers Set-Cookie;来取消掉这个特性。

最后,把后台地址的转发规则加到根目录之前,并且break掉

location /ghost/ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://yourhost;
        proxy_http_version 1.1;
        break;
    }

Ruosen

Be a Geek, Do the right thing;