使用 NGINX 的 fastcgi 缓存加快网站访问速度

使用 NGINX 的 fastcgi 缓存加快网站访问速度

Chris Yue 2 comments
Posts

目前有个项目,与n家知名第三方公司合作,合作当天并发之高,CPU 和数据库连接数立马不够用,但访问的却又是一些可短时间缓存的页面。当时第一反应是用 Varnish,但听说 NGINX 也自带了反向代理之类的东西,先查了一下使用方式,以及同 Varnish 的对比,还真 get 到 fastcgi cache 这个好用的东西。

下面就 fastcgi cache 相关的设置一一做一个介绍

fastcgi_cache_path

这个是必须设置的东东,当然从字面意思就能看出来这个是设置缓存存放路径的。注意此指令必须配置在 http 节点下

例子

fastcgi_ignore_header

从官方文档里可以看到,如果 fastcgi 返回了 set-cacheexpirescache-controlvary 字段,会对 response cache 功能有影响,所以如果想直接通过 NGINX 统一处理缓存而无视 fastcgi 的缓存头设置,那么你需要做以下设置:

此指令在 http, server, location 三个节点均可设置。

是否需要使用此指令,关键是看需求。如果你想通过 fastcgi 来控制缓存的时间,那么还是自己设置 Cache-Control 或者 Expires 来控制会更灵活(这样会无视 fastcgi_cache_valid 设置,有关此设置看后面)。需要注意的是,据我观察,如果 fastcgi 生成 Set-Cookie 头了,而 NGINX 不忽略此头信息的话,是怎么也不会生成缓存的。官方文档没有提这个事情,还需要继续查找文档。

fastcgi_cache_key

这个指令从字面意思就能看出来是定义缓存 key 的生成规则的,一般如下设置就行:

此指令也是 http, server, location 均可设置

fastcgi_cache_valid

用来定义缓存的时间,可以为某个 status code 单独设置,看一个官方文档的例子:

注意之前说过,如果服务器响应有缓存相关的头信息,而又没有使用 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

一月 4, 2016 在 10:22 上午

这是个很实用的技能,能很大程度的降低系统的复杂度。

    Chris Yue

    一月 4, 2016 在 2:38 下午

    好久不见,最近在忙什么

     

发表评论

− 1 = 1