Nginx的Fastcgi cache是用来缓存用户要求,当用户下次再进行同样的访问的时候直接将缓存结果返回给用户,避免了Nginx再向上游要求结果的过程,使做事性能大幅度提升,如果做事是静态可缓存的话利用这个模块能够明显缩短用户要求韶光同时节省做事器资源,大大提升做事的QPS。

Fastcgi缓存的优缺陷

通过缓存php、asp天生的动态内容,来减少了nginx与php、asp的通信次数,从而减轻php、asp和后段数据库的压力,相应韶光由几百毫秒降落到几十毫秒。

phpnginx优化Nginx 响应提速10倍你须要知道的缓存机能优化FastCGI调优 SQL

虽然效果显著,但是fastcgi_cache有个致命缺陷,在缓存失落效韶光之内,纵然更新了数据库信息,访问内容也不会发生变革。

Fastcgi缓存的适用场景

非即时数据查询的运用数据变革频率低轻量,非大型web站点节省资源,代替Memcached做事器Fastcgi优化配置详解

就优化性能参数设置,下面会从两个模块分别解释:

1)http区域设置的缓存参数

fastcgi_temp_path path [level1 [level2 [level3]]];fastcgi_cache_path path [levels=m:n] keys_zone=name:size [inactive=time] [max_size=size]

参数阐明:

# path 缓存文件存放(临时)目录# levels 缓存层次# keys_zone 缓存空间名和共享内存大小# inactive 失落效韶光, 1d = 1天# max_size 最大缓存空间(硬盘占用)

【推举配置】

fastcgi_temp_path /tmp/tempfastcgi_cache_path /var/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:256m inactive=1d max_size=1g; #共享内存大小和最大缓存空间由详细运用重新评估设置

注: fastcgi_temp_path 和 fastcgi_cache_path 指定的路径必须在同一分区

2)server模块设置的缓存参数

fastcgi_connect_timeout=300; #fastcgi连接超时时间fastcgi_send_timeout=300; #fastcgi要求超时时间fastcgi_rend_timeout=300; #吸收fastcgi应答超时时间fastcgi_buffer_size=64k; #读取fastcgi应答须要多大缓冲区fastcgi_buffers 4 64k; #指定本地须要多少个和多大的缓冲区来缓冲fastcgi应答要求fastcgi_busy_buffers_size 128k; #默认值是fastcgi_buffer的2倍fastcgi_temp_file_write_size 128k; #写入缓存文件利用多大的数据块 fastcgi_cache #表示开启FastCGI缓存并为其指定一个名称。
fastcgi_cache_valid #指定缓存状态及失落效韶光fastcgi_cache_min_uses #指定缓存成为过期数据fastcgi_cache_use_stale #定义哪些情形下用过期缓存fastcgi_cache_key #指定缓存文件的标识,这个标识会 MD5 转码存储在缓存域的目录下ffastcgi_cache_methods #指定缓存的要求办法

【推举配置】

fastcgi_connect_timeout=300fastcgi_send_timeout=300;fastcgi_rend_timeout=300;fastcgi_buffer_size=64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k;fastcgi_cache fcgi;fastcgi_cache_valid 200 302 301 1h;fastcgi_cache_valid any 1m;fastcgi_cache_min_uses 1;fastcgi_cache_use_stale error timeout invalid_header http_500;fastcgi_cache_key \"大众$request_method://$host$request_uri\公众;fastcgi_cache_methods GET HEAD;

其他问题

1、页面访问空缺

缘故原由:这是由于 fastcgi_cache_key 中没有设置$request_method,将 GET 和 HEAD 的要求存储到了同一个 key 中。

办理:配置完毕后,访问偶尔涌现空缺页面,清空缓存目录后,重新访问规复。

2、页面缓存失落败,一贯 MISS

缘故原由:默认情形下,要求的 header 中包含“Expires”, “Cache-Control”, “Set-Cookie”等,页面将不会被缓存。

办理:添加参数 fastcgi_ignore_headers Cache-Control Expires SetCookie;重载nginx做事即可。