有一个API接口访问量很大,而且对内容的时效性没有很高要求,使用 fastcgi_cache 可以很好的降低服务器负载,不过 laravel 的页面默认几乎都会带上 no-cache 的 头信息,所以 api 接口需要把这个头信息去掉才能让 nginx 的 fastcgi_cache 命中,方法:

    return Response::view('pages.index', $data)
        ->setCache(array( 'public' => 1 )); //这里还有很多参数可以设置

如果你使用了CDN可以设置 max_age 为cdn缓存时长,还可以 last_modified 为文章修改时间, etag 等。

我是开启了 nginx 的fastcgi_cache 功能 所以只需要一简单的 public 就可以了.

nginx fastcgi_cache 设置简单说明

文件 fcgi_cache.conf :

fastcgi_temp_path /tmp/ngx_fcgi_tmp;
fastcgi_cache_path /tmp/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=3h max_size=5g;
fastcgi_cache_valid 200 3h;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_cache_key $request_method://$host$request_uri;
fastcgi_cache_methods GET HEAD;
  • fastcgi_temp_path:生成fastcgi_cache临时文件目录
  • fastcgi_cache_path:fastcgi_cache缓存目录,可以设置目录哈希层级,比如2:2会生成256*256个字目录,keys_zone是这个缓存空间的名字,cache是用多少内存(主要缓存key和文件元信息,不会缓存页面),inactive表示默认失效时间,max_size表示最多用多少硬盘空间,需要注意的是fastcgi_cache缓存是先写在fastcgi_temp_path再移到fastcgi_cache_path,所以这两个目录最好在同一个分区,从0.8.9之后可以在不同的分区,不过还是建议放同一分区。
  • fastcgi_cache_valid:定义哪些http状态码要缓存,和换成多久 1d 3h 5m 10s
  • fastcgi_cache_use_stale:定义哪些情况下用过期缓存
  • fastcgi_cache_key:定义fastcgi_cache的key,示例中就以请求的URI作为缓存的key,Nginx会取这个key的md5作为缓存文件,如果设置了缓存哈希目录,Nginx会从后往前取相应的位数做为目录。
  • fastcgi_cache:用哪个缓存空间
  • fastcgi_cache_methods:那些请求method 使用缓存

nginx.conf http { ... }include fcgi_cache.conf;

虚拟主机 location php 段 天津

add_header X-Cache-CFC "$upstream_cache_status - $upstream_response_time"; #header 里添加调试信息
fastcgi_cache ngx_fcgi_cache;

qianfeng
243 声望8 粉丝