加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 教程 > 正文

巧用nginx的fastcgi_cache模块来做缓存

发布时间:2022-06-24 09:04:14 所属栏目:教程 来源:互联网
导读:nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache。 fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容. proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态. p
  nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache。
 
       fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容.
 
  proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态.

  proxy_cache缓存减少了nginx与后端通信的次数,节省了传输时间和后端宽带.
 
  fastcgi_cache缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力,这比用memcached之类的缓存要轻松得多。
 
  但是,缓存也有弊端,比如说评论了之后不能会当时显示等等,自己取舍,有得必有失.
 
  本着测试的原则,在本站上测试了一下fastcgi_cache这个功能,貌似还不错,减少数据库的查询了,顺便优化下fastcgi的参数,的嘿嘿,贴上配置nginx的httpd段里面加入
 
  fastcgi_connect_timeout 300;
 
  指定连接到后端FastCGI的超时时间。
 
  fastcgi_send_timeout 300;
 
  向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
 
  fastcgi_busy_buffers_size 64k;
 
  默认值是fastcgi_buffers的两倍。
 
  fastcgi_temp_file_write_size 64k;
 
  在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍。
 
  fastcgi_cache_path /var/logs/nginx/fastcgi_cache_dir levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=10g;
 
  这个指令为FastCGI缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。以及最大占用空间。
 
  表示开启FastCGI缓存并为其指定一个名称。
 
  fastcgi_cache_valid 200 302 301 1h;
 
  fastcgi_cache_valid any 1m;
 
  为指定的应答代码指定缓存时间,如上例中将200,302 301应答缓存一小时,其他为1分钟。
 
  fastcgi_cache_min_uses 1;
 
  设置链接请求几次就被缓存。
 
  fastcgi_cache_use_stale error timeout invalid_header http_500;
 
  定义哪些情况下用过期缓存
 
  fastcgi_cache_key $request_method://$host$request_uri;
 
  注意一定要加上$request_method作为cache key,否则如果HEAD类型的先请求会导致后面的GET请求返回为空
 
  }
 
  设置了之后重启nginx就可以生效了,这个时候再访问php的页面的话,就会被缓存了,可以查看/var/logs/nginx/fastcgi_cache_dir这个目录下面是有缓存文件的。最后再说明一点,如果更改了缓存目录的路径,一定要把缓存的名称也改掉,后端调用的名称也同步改掉,如果只改掉了缓存目录,不改缓存名称的话,缓存的时候还是会缓存到之前的路径下面去,但是调用的时候调用的是新的路径,这个时候就会出现找不到的情况,在日志里面可以看出来,如下:
 
  2012/04/24 13:55:35 [emerg] 2020#0: cache “cache_one” uses the “/var/logs/nginx/fastcgi_cache_dir” cache path while previously it used the “/var/logs/nginx/proxy_cache_dir” cache path
 
  2012/04/24 14:06:30 [emerg] 2020#0: cache “cache_one” uses the “/var/logs/nginx/fastcgi_cache_dir” cache path while previously it used the “/var/logs/nginx/proxy_cache_dir” cache path
 
  2012/04/24 14:16:03 [emerg] 2020#0: cache “cache_one” uses the “/var/logs/nginx/fastcgi_cache_dir” cache path while previously it used the “/var/logs/nginx/proxy_cache_dir” cache path
 
  2012/04/24 14:25:39 [emerg] 2020#0: cache “cache_fastcgi” uses the “/var/logs/nginx/proxy_cache_dir” cache path while previously it used the “/var/logs/nginx/fastcgi_cache_dir” cache path
 
  这个问题让我纠结了好久,最后查看日志才发现没改缓存名的时候,调用的时候调用的是新路径,但是缓存的时候缓存到没改之前的路径里面去了。郁闷。
 
 

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读