nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache。
proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态。
fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容。
proxy_cache缓存减少了nginx与后端通信的次数,节省了传输时间和后端宽带。
fastcgi_cache缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力,这比用memcached之类的缓存要轻松得多。
但是,缓存也有弊端,比如说评论了之后不能会当时显示等等,自己取舍,有得必有失。
1,在nginx.conf http段添加以下内容:
fastcgi_cache_path /var/www/html/fastcgi_cache levels=1:2 keys_zone=fcgi:15m inactive=1d max_size=1g; ##15m为内存占用 1g为硬盘最大占用空间
#这个指令为FastCGI缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。以及最大占用空间。
2.在 vhost 配置文件里的 location ~ \.php { 下添加以下内容:
#######################cache####################
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_cache_methods GET HEAD POST;
fastcgi_buffer_size 4k; # 指定读取FastCGI应答第一部分需要用多大的缓冲区,一般第一部分是请求头应答。
fastcgi_buffers 80 8k;
#Sets the number and size of the buffers used for reading a response from the FastCGI server, for a single connection. By default, the buffer size is equal to one memory page. This is either 4K or 8K, depending on a platform. centos,ubuntu 默认为4k
fastcgi_busy_buffers_size 16k; #默认值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size 16k; # 在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍。
fastcgi_cache fcgi;
fastcgi_cache_valid 200 302 1h; #缓存http状态 200 302 1小时
fastcgi_cache_valid 301 1d; #缓存http状态 301 1天
fastcgi_cache_valid any 1m; #其他应答代码缓存1分钟。
fastcgi_cache_min_uses 1; #设置链接请求几次就被缓存。
fastcgi_cache_use_stale error timeout invalid_header http_500; #定义哪些情况下用过期缓存
fastcgi_cache_key $request_method://$host$request_uri; #
#######################cache####################
设置了之后重启nginx就可以生效了,这个时候再访问php的页面的话,就会被缓存了,可以查看/var/logs/nginx/fastcgi_cache_dir这个目录下面是有缓存文件的。最后再说明一点,如果更改了缓存目录的路径,一定要把缓存的名称也改掉,后端调用的名称也同步改掉,如果只改掉了缓存目录,不改缓存名称的话,缓存的时候还是会缓存到之前的路径下面去,但是调用的时候调用的是新的路径,这个时候就会出现找不到的情况,