·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
返回列表 发布新帖

nginx有两种缓存机制:fastcgi_cache和proxy_cache

206 1
发表于 2024-2-10 20:11:53 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
nginx有两种缓存机制:fastcgi_cache和proxy_cache
下面我们来说说这两种缓存机制的区别吧
proxy_cache作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态的
fastcgi_cache作用是缓存fastcgi生成的内容,很多情况是php生成的动态内容
proxy_cache缓存减少了nginx与后端通信的次数,节省了传输时间和后端带宽
fastcgi_cache缓存减少了nginx与php的通信次数,更减轻了php和数据库的压力。

proxy_cache缓存设置
#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path   /data0/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
  1. proxy_cache_path  /data0/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;
  2. server
  3.   {
  4.     listen       80;
  5.     server_name  www.yourdomain.com 192.168.8.42;
  6.     index index.html index.htm;
  7.     root  /data0/htdocs/www;
  8.     location /
  9.     {
  10.          #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
  11.          proxy_next_upstream http_502 http_504 error timeout invalid_header;
  12.          proxy_cache cache_one;
  13.          #对不同的HTTP状态码设置不同的缓存时间
  14.          proxy_cache_valid  200 304 12h;
  15.          #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
  16.          proxy_cache_key $host$uri$is_args$args;
  17.          proxy_set_header Host  $host;
  18.          proxy_set_header X-Forwarded-For  $remote_addr;
  19.          proxy_pass http://backend_server;
  20.          expires      1d;
  21.     }
  22.     #用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。
  23.     location ~ /purge(/.*)
  24.     {
  25.      #设置只允许指定的IP或IP段才可以清除URL缓存。
  26.      allow            127.0.0.1;
  27.      allow            192.168.0.0/16;
  28.      deny            all;
  29.      proxy_cache_purge    cache_one   $host$1$is_args$args;
  30.     }   
  31.     #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
  32.     location ~ .*.(php|jsp|cgi)?$
  33.     {
  34.          proxy_set_header Host  $host;
  35.          proxy_set_header X-Forwarded-For  $remote_addr;
  36.          proxy_pass http://backend_server;
  37.     }
  38.     access_log  off;
  39.   }
  40. }
复制代码

fastcgi_cache缓存设置
#定义缓存存放的文件夹
fastcgi_cache_path   /tt/cache  levels=1:2 keys_zone=NAME:2880m inactive=2d max_size=10G;

#定义缓存不同的url请求
  1. fastcgi_cache_key "$scheme$request_method$host$uri$arg_filename$arg_x$arg_y";
  2. server {
  3.     listen       8080;
  4.     server_name  www.example .com;
  5.     location / {
  6.         root   /www;
  7.         index  index.html index.htm index.php;
  8.     }
  9.     location ~ (|.php)$ {
  10.         root           /www;
  11.         fastcgi_pass   127.0.0.1:9000;
  12.         fastcgi_cache   NAME;
  13.         fastcgi_cache_valid 200 48h;
  14.         fastcgi_cache_min_uses  1;
  15.         fastcgi_cache_use_stale error  timeout invalid_header http_500;
  16.         fastcgi_index  index.php;
  17.         fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  18.         include        fastcgi.conf;
  19.         #设置缓存的过程中发现无法获取cookie,经查需要定义这句话
  20.         fastcgi_pass_header Set-Cookie;
  21.     }
  22.     log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
  23.               '$status $body_bytes_sent "$http_referer" '
  24.               '"$http_user_agent" $http_x_forwarded_for';
  25.    access_log  /httplogs/access.log  access;
  26. }
复制代码
总的来说  nginx的proxy_cache和fastcgi_cache的缓存配置差不多。
我要说一句 收起回复
创宇盾启航版免费网站防御网站加速服务

评论1

TyCodingLv.8 发表于 2024-2-10 20:12:08 | 查看全部
nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache。
proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态。
fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容。
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_read_timeout 300;
接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_buffer_size 32k;
指定读取FastCGI应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为4k,所以这里设置为4k。
fastcgi_buffers 4 32k;
定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。
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缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。以及最大占用空间。
然后在server的location里面调用,如下缓存php文件:
location ~ \.php$ {
    root /var/www/html/yan_blog;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_cache cache_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
这个问题让我纠结了好久,最后查看日志才发现没改缓存名的时候,调用的时候调用的是新路径,但是缓存的时候缓存到没改之前的路径里面去了。郁闷、


原文地址:http://www.linuxyan.com/web-server/78.html
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.149.246.62,GMT+8, 2024-12-19 20:44 , Processed in 0.249016 second(s), 85 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表