目前有个项目,与n家知名第三方公司合作,合作当天并发之高,CPU 和数据库连接数立马不够用,但访问的却又是一些可短时间缓存的页面。当时第一反应是用 Varnish,但听说 NGINX 也自带了反向代理之类的东西,先查了一下使用方式,以及同 Varnish 的对比,还真 get 到 fastcgi cache 这个好用的东西。
下面就 fastcgi cache 相关的设置一一做一个介绍
fastcgi_cache_path
这个是必须设置的东东,当然从字面意思就能看出来这个是设置缓存存放路径的。注意此指令必须配置在 http
节点下
例子
fastcgi_cache_path /path/to/cache/dir levels=1:2 keys_zone=fastcgicache:100m;
fastcgi_ignore_header
从官方文档里可以看到,如果 fastcgi
返回了 set-cache
,expires
,cache-control
,vary
字段,会对 response cache 功能有影响,所以如果想直接通过 NGINX 统一处理缓存而无视 fastcgi 的缓存头设置,那么你需要做以下设置:
fastcgi_ignore_headers Expires Vary Set-Cookie Cache-Control
此指令在 http
, server
, location
三个节点均可设置。
是否需要使用此指令,关键是看需求。如果你想通过 fastcgi 来控制缓存的时间,那么还是自己设置 Cache-Control
或者 Expires
来控制会更灵活(这样会无视 fastcgi_cache_valid
设置,有关此设置看后面)。需要注意的是,据我观察,如果 fastcgi 生成 Set-Cookie
头了,而 NGINX 不忽略此头信息的话,是怎么也不会生成缓存的。官方文档没有提这个事情,还需要继续查找文档。
fastcgi_cache_key
这个指令从字面意思就能看出来是定义缓存 key 的生成规则的,一般如下设置就行:
fastcgi_cache_key $scheme$request_method$host$request_uri
此指令也是 http
, server
, location
均可设置
fastcgi_cache_valid
用来定义缓存的时间,可以为某个 status code 单独设置,看一个官方文档的例子:
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 404 1m;
注意之前说过,如果服务器响应有缓存相关的头信息,而又没有使用 fastcgi_ignore_headers
忽略掉头信息的话,此设置是不会生效的。
此指令也是 http
, server
, location
均可设置
fastcgi_cache
最后是 fastcgi_cache
,只要在某个 http
, server
或者 location
节点里打开此设置,就可以使用 fastcgi 缓存啦。我的服务器的页面要求的实时性还是比较高的,所以只设置了 5 秒钟的缓存时间,但 CPU 也立马从 100% 降到 10% ~ 30%,峰值也不超过 40%,一台机器就能抵抗住同时 4000+ 的并发链接,非常高效哦。
当然关于 fastcgi 缓存的设置不止这些,大家可以去官网了解。
使用 NGINX 的 fastcgi 缓存加快网站访问速度 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人
2 Comments
maker
1月 4, 2016 在 10:22 上午这是个很实用的技能,能很大程度的降低系统的复杂度。
Chris Yue
1月 4, 2016 在 2:38 下午好久不见,最近在忙什么