利用nginx的fastcgi_cache模块来做缓存
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模块来做缓存的更多相关文章
- 【摘自张宴的"实战:Nginx"】使用nginx的proxy_cache模块替代squid,缓存静态文件
#user nobody;worker_processes 1; error_log logs/static_source.error.log;#error_log logs/error.log no ...
- 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 : . ...
- PHP 利用nginx的X-sendfile控制下载,提高下载效率
https://blog.csdn.net/qq_34839657/article/details/52812885 https://www.jianshu.com/p/bf5c387830b7 为了 ...
- nginx利用fastcgi_cache模块缓存
nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache.proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和 ...
- nginx添加proxy_cache模块做缓存服务器
业务需求nginx对后端tomcat(静态文件)做缓存 减轻后端服务器的压力 # nginx-1.6.2.tar.gz ngx_cache_purge-2.3.tar.gz #编译安装 ./conf ...
- 利用Nginx中的Upstream模块配置服务器负载均衡
1. 前言 nginx有一个最大的功能就是可以实现服务器的负载均衡,本篇博文就利用nginx中的upstream模块来配置一个简单的负载均衡.关于nginx的安装和配置文件可以查阅博文:windows ...
- [转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞
利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha ...
- 如何利用Nginx的缓冲、缓存优化提升性能
使用缓冲释放后端服务器 反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响.在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻. 当代理到另一台服务器,两个不同的连接 ...
- 利用 NGINX 最大化 Python 性能,第一部分:Web 服务和缓存
[编者按]本文主要介绍 nginx 的主要功能以及如何通过 NGINX 优化 Python 应用性能.本文系国内 ITOM 管理平台 OneAPM 编译呈现. Python 的著名之处在于使用简单方便 ...
随机推荐
- 割点(Tarjan算法)【转载】
本文转自:www.cnblogs.com/collectionne/p/6847240.html 供大家学习 前言:之前翻译过一篇英文的关于割点的文章(英文原文.翻译),但是自己还有一些不明白的地方, ...
- Luogu2114 [NOI2014]起床困难综合症 【位运算】
题目分析: 按位处理即可 代码: #include<bits/stdc++.h> using namespace std; ; int n,m; int a[maxn],b[maxn]; ...
- vagrant 使用
1. 下载官方的 box 文件. 官方box列表 2. 在本地创建一个目录.如: D:\test\ 3. 运行 cmd 命令,并进入 d:\test 目录 4. 添加前面下载的 box. 添加 box ...
- Python之‘’控制流‘’
一.if语句 格式: i1 = 3 if i1 > 4: print('yes you are right') elif 0 < i1 < 4: print('im dont kon ...
- springboot junit单元测试报错
1.测试类中如下方框为主函数 2.application.yml注意如下2个地方 3.主函数
- 《C程序设计II》简易计算器,杨辉,数字杯子图形
<C程序设计II>简易计算器,杨辉,数字杯子图形.<C程序设计II>简易计算器,杨辉,数字杯子图形.<C程序设计II>简易计算器,杨辉,数字杯子图形. <C程 ...
- python 根据 数据库创建java 文件
#coding=utf-8 import pymysql import os import re # 包全路径 packagepath=r'E:\idea工程\dc-exam\dc-exam\src\ ...
- CodeForces - 593A -2Char(思维+暴力枚举)
Andrew often reads articles in his favorite magazine 2Char. The main feature of these articles is th ...
- echarts设置线条粗细
series: [ { name:"buy", type:'line', data:[], itemStyle: { normal: { color: '#6cb041', lin ...
- ConvertLongToInstantUtil
package com.test; import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneId ...