Nginx的缓存:proxy_cache和fastcgi_cache
2017-02-07 11:35
316 查看
proxy_cache和fastcgi_cache构成了Nginx的缓存,proxy_cache主要用于反向代理时,对后端内容源服务器进行缓存,可能是任何内容,包括静态的和动态,缓存减少了nginx与后端通信的次数,节省了传输时间和后端宽带;fastcgi_cache主要用于对FastCGI的动态程序进行缓存,很多情况是php生成的动态的内容,fastcgi_cache缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力,这比用memcached之类的缓存要轻松得多。。两者的功能基本上一样。
在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。
所以可以根据实际情况结合使用proxy_cache和fastcgi_cache来架构Nginx的负载均衡系统。
FastCGI 的技术原理就要了解何为”短生存期应用程序”,何为”长生存期应用程序”。先从 CGI 技术开刀,以下是 CGI 技术的理论:每次当客户请求一个 CGI 的时候,Web 服务器就请求操作系统生成一个新的 CGI 进程。当 CGI 满足要求后,服务器就杀死这个进程。服务器对客户端的每个请求都要重复这样的过程。而 FastCGI 技术的理论为:FastCGI 程序一旦产生后,他可以持续工作,足够满足客户的请求直到被明确的终止。如果你希望通过协同处理来提高程序的性能,你可以请求 Web 服务器运行多个
FastCGI应用程序的副本。CGI 就是所谓的短生存期应用程序,FastCGI 就是所谓的长生存期应用程序。由于 FastCGI 程序并不需要不断的产生新进程,可以大大降低服务器的压力。并且产生较高的应用效率。
很多时候一个页面由多个数据片断组成,为了提高页面速度,要么分别缓存,要么整体缓存(所谓的Page Cache)
关于Nginx fastcgi_cache,基础的可以参看Nginx官方文档http://wiki.nginx.org/HttpFcgiModule,下面是一个典型的做法是:
大概解释下各个参数的含义:
fastcgi_temp_path:生成fastcgi_cache临时文件目录,fastcgi_cache_path:fastcgi_cache缓存目录,可以设置目录哈希层级,比如2:2会生成256*256个字目录,keys_zone是这个缓存空间的名字,cache是用多少内存(这样热门的内容nginx直接放内存,提高访问速度),inactive表示默认失效时间,max_size表示最多用多少硬盘空间,需要注意的是fastcgi_cache缓存是先写在fastcgi_temp_path再移到fastcgi_cache_path,所以这两个目录最好在同一个分区,从0.8.9之后可以在不同的分区,不过还是建议放同一分区。
fastcgi_cache_valid:定义哪些http头要缓存,fastcgi_cache_use_stale:定义哪些情况下用过期缓存
fastcgi_cache_key:定义fastcgi_cache的key,示例中就以请求的URI作为缓存的key,Nginx会取这个key的md5作为缓存文件,如果设置了缓存哈希目录,Nginx会从后往前取相应的位数做为目录。
fastcgi_cache:用哪个缓存空间
如何手动清除缓存?有个Nginx的第三方扩展可帮你做到:https://github.com/FRiCKLE/ngx_cache_purge/
直接找到缓存文件,然后删掉就可以;
Nginx fastcgi_cache缓存很不错,但我只想在某些页面用fastcgi_cache,很简单,有两种方法,一是在location中定义fastcgi_cache,这样只有满足一定规则的url才会用上cache,其他的就不会了;另外一种方法是在你不需要缓存的页面上,输出禁止缓存的头信息,用ColaPHP的话,直接$this->response->disableBrowserCache(); 具体代码:
大部分都是Memcache、Xcache、Proxy_Cache,FastCgi Cache很少采用
配置方法很简单
1、新建文件夹存放缓存文件
mkdir /home/cache/fcgi -p (www的权限)
2、修改nginx.conf文件(LNMP一键包目录在/usr/local/nginx/conf/nginx.conf),在http层加入:
fastcgi_cache_path /home/cache/fcgi levels=1:2 keys_zone=fcgi:15m inactive=1d max_size=1g;
#15m为内存占用 1g为硬盘最大占用空间
3、修改位于vhost目录下的站点文件
5、打开站点,看缓存目录是否增大
du -sh /home/cache/fcgi
转自:http://blog.angryfox.com/?p=1930
在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。
所以可以根据实际情况结合使用proxy_cache和fastcgi_cache来架构Nginx的负载均衡系统。
FastCGI 的技术原理就要了解何为”短生存期应用程序”,何为”长生存期应用程序”。先从 CGI 技术开刀,以下是 CGI 技术的理论:每次当客户请求一个 CGI 的时候,Web 服务器就请求操作系统生成一个新的 CGI 进程。当 CGI 满足要求后,服务器就杀死这个进程。服务器对客户端的每个请求都要重复这样的过程。而 FastCGI 技术的理论为:FastCGI 程序一旦产生后,他可以持续工作,足够满足客户的请求直到被明确的终止。如果你希望通过协同处理来提高程序的性能,你可以请求 Web 服务器运行多个
FastCGI应用程序的副本。CGI 就是所谓的短生存期应用程序,FastCGI 就是所谓的长生存期应用程序。由于 FastCGI 程序并不需要不断的产生新进程,可以大大降低服务器的压力。并且产生较高的应用效率。
很多时候一个页面由多个数据片断组成,为了提高页面速度,要么分别缓存,要么整体缓存(所谓的Page Cache)
关于Nginx fastcgi_cache,基础的可以参看Nginx官方文档http://wiki.nginx.org/HttpFcgiModule,下面是一个典型的做法是:
fastcgi_temp_path /data/ngx_fcgi_tmp; fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g; fastcgi_cache_valid 200 301 302 1d; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_cache_key http://$host$request_uri;
大概解释下各个参数的含义:
fastcgi_temp_path:生成fastcgi_cache临时文件目录,fastcgi_cache_path:fastcgi_cache缓存目录,可以设置目录哈希层级,比如2:2会生成256*256个字目录,keys_zone是这个缓存空间的名字,cache是用多少内存(这样热门的内容nginx直接放内存,提高访问速度),inactive表示默认失效时间,max_size表示最多用多少硬盘空间,需要注意的是fastcgi_cache缓存是先写在fastcgi_temp_path再移到fastcgi_cache_path,所以这两个目录最好在同一个分区,从0.8.9之后可以在不同的分区,不过还是建议放同一分区。
fastcgi_cache_valid:定义哪些http头要缓存,fastcgi_cache_use_stale:定义哪些情况下用过期缓存
fastcgi_cache_key:定义fastcgi_cache的key,示例中就以请求的URI作为缓存的key,Nginx会取这个key的md5作为缓存文件,如果设置了缓存哈希目录,Nginx会从后往前取相应的位数做为目录。
fastcgi_cache:用哪个缓存空间
如何手动清除缓存?有个Nginx的第三方扩展可帮你做到:https://github.com/FRiCKLE/ngx_cache_purge/
直接找到缓存文件,然后删掉就可以;
Nginx fastcgi_cache缓存很不错,但我只想在某些页面用fastcgi_cache,很简单,有两种方法,一是在location中定义fastcgi_cache,这样只有满足一定规则的url才会用上cache,其他的就不会了;另外一种方法是在你不需要缓存的页面上,输出禁止缓存的头信息,用ColaPHP的话,直接$this->response->disableBrowserCache(); 具体代码:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache");
大部分都是Memcache、Xcache、Proxy_Cache,FastCgi Cache很少采用
配置方法很简单
1、新建文件夹存放缓存文件
mkdir /home/cache/fcgi -p (www的权限)
2、修改nginx.conf文件(LNMP一键包目录在/usr/local/nginx/conf/nginx.conf),在http层加入:
fastcgi_cache_path /home/cache/fcgi levels=1:2 keys_zone=fcgi:15m inactive=1d max_size=1g;
#15m为内存占用 1g为硬盘最大占用空间
3、修改位于vhost目录下的站点文件
location ~ .*\.(php|php5)?$ { #try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; #fastcgi_index index.php; include fcgi.conf; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/wwwroot/$fastcgi_script_name; #网站请求的根目录 include fastcgi_params; 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; } /etc/init.d/nginx restart
5、打开站点,看缓存目录是否增大
du -sh /home/cache/fcgi
转自:http://blog.angryfox.com/?p=1930
相关文章推荐
- Nginx缓存功能:Proxy_cache与fastcgi_cache区别
- 使用Nginx的proxy_cache缓存功能取代Squid
- 使用Nginx的proxy_cache缓存功能取代Squid
- 使用Nginx的proxy_cache缓存功能取代Squid
- nginx的proxy_cache缓存相关配置
- nginx proxy cache 缓存 流程
- nginx的proxy_cache缓存功能详解
- nginx利用proxy_cache来缓存文件
- nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
- Nginx启用proxy_cache缓存的方法
- 使用Nginx的proxy_cache缓存功能取代Squid[原创]
- 使用Nginx的proxy_cache缓存功能取代Squid
- nginx缓存设置proxy_cache
- nginx内置缓存Proxy_cache
- nginx利用proxy_cache来缓存文件
- 利用nginx proxy_cache进行网站缓存托底配置 nginx fastcgi cache nginx cache 配置 nginx file cach
- 使用Nginx的proxy_cache缓存功能取代Squid
- nginx+ keepalived+proxy_cache实现nginx高可用及高速缓存
- 使用Nginx的proxy_cache缓存功能取代Squid
- nginx缓存之proxy_cache遇到的坑