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

这个问题让我纠结了好久,最后查看日志才发现没改缓存名的时候,调用的时候调用的是新路径,但是缓存的时候缓存到没改之前的路径里面去了。郁闷、

利用nginx的fastcgi_cache模块来做缓存的更多相关文章

  1. 【摘自张宴的"实战:Nginx"】使用nginx的proxy_cache模块替代squid,缓存静态文件

    #user nobody;worker_processes 1; error_log logs/static_source.error.log;#error_log logs/error.log no ...

  2. nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。

    ownload:http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gzconfigure and make : . ...

  3. PHP 利用nginx的X-sendfile控制下载,提高下载效率

    https://blog.csdn.net/qq_34839657/article/details/52812885 https://www.jianshu.com/p/bf5c387830b7 为了 ...

  4. nginx利用fastcgi_cache模块缓存

    nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache.proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和 ...

  5. nginx添加proxy_cache模块做缓存服务器

    业务需求nginx对后端tomcat(静态文件)做缓存 减轻后端服务器的压力 # nginx-1.6.2.tar.gz  ngx_cache_purge-2.3.tar.gz #编译安装 ./conf ...

  6. 利用Nginx中的Upstream模块配置服务器负载均衡

    1. 前言 nginx有一个最大的功能就是可以实现服务器的负载均衡,本篇博文就利用nginx中的upstream模块来配置一个简单的负载均衡.关于nginx的安装和配置文件可以查阅博文:windows ...

  7. [转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞

    利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha ...

  8. 如何利用Nginx的缓冲、缓存优化提升性能

    使用缓冲释放后端服务器 反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响.在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻. 当代理到另一台服务器,两个不同的连接 ...

  9. 利用 NGINX 最大化 Python 性能,第一部分:Web 服务和缓存

    [编者按]本文主要介绍 nginx 的主要功能以及如何通过 NGINX 优化 Python 应用性能.本文系国内 ITOM 管理平台 OneAPM 编译呈现. Python 的著名之处在于使用简单方便 ...

随机推荐

  1. 阿里云ECS centos7.2 支持IPv6

    公司的项目因为服务器没有支持IPv6而被appstore给退回来了 第一部分 第一步:编辑 /etc/sysctl.conf 文件,将其中三条禁用IPv6的设置更改为: 第二步:使用命令启动启用IPv ...

  2. [raspberry pi3] 串口线使用

    直接上图 GPIO 口说明: 串口线连接: 参考地址: http://bbs.elecfans.com/jishu_596578_1_1.html

  3. 在OnRowDataBound或OnItemDataBound事件中获取字段值

    不管是在GridView,DataList还是Repeater控件中,其中Repeater控件,没有DataKeyNames或是DataKeyField属性,想获取记录的主键值,只好用Label或是H ...

  4. 选择性搜索(Selective Search)

    1 概述 本文牵涉的概念是候选区域(Region Proposal ),用于物体检测算法的输入.无论是机器学习算法还是深度学习算法,候选区域都有用武之地. 2 物体检测和物体识别 物体识别是要分辨出图 ...

  5. [Windows] 程序生成出现语法错误: 意外的令牌“标识符”,预期的令牌为“类型说明符”

    程序生成出现语法错误: 意外的令牌“标识符”,预期的令牌为“类型说明符” 将平台工具集改为VS 2015 (v140) ,重新编译即可

  6. Xgboost的sklearn接口参数说明

    from xgboost.sklearn import XGBClassifier model=XGBClassifier(base_score=0.5, booster='gbtree', cols ...

  7. nginx: [emerg] directive "location" has no opening "{" in /usr/local/nginx//conf/nginx.conf:75

    1.报错:[emerg]directive "location" has no opening "{" in ..... 解决方法: 由于对应行或者附近行的“{ ...

  8. v$sqlarea,v$sql,v$sqltext这三个视图提供的sql语句有什么区别?

    v$sqltext存储的是完整的SQL,SQL被分割 SQL> desc v$sqltextName                                      Null?    ...

  9. C++基础学习6:内联函数

    C++语言新增关键字 inline,用于将一个函数声明为内联函数.在程序编译时,编译器会将内联函数调用处用函数体替换,这一点类似于C语言中的宏扩展. 采用内联函数可以有效避免函数调用的开销,程序执行效 ...

  10. centos上安装docker

    一 docker安装: 1 首先需要检查linux内核的版本,docker要求linux内核是在3.10之上的, uname -r 2 更新yum源,注意这步应该是管理员权限,如果当前不是管理员,切换 ...