博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于nginx的FastCGI的缓存配置
阅读量:2428 次
发布时间:2019-05-10

本文共 2527 字,大约阅读时间需要 8 分钟。

废话不多说了, 直接上配置, 其实 fastcgi_cache 和 proxy_cache 的配置基本一样:

# !缓存文件存放目录# levels    缓存层次# keys_zone 缓存空间名和共享内存大小(热点内容放在内存)# inactive  失效时间, 1d = 1天# max_size  最大缓存空间(硬盘占用)fastcgi_cache_path /home/xwsoul/code/web/demo/cgi_cache/cache_dir/ levels=2:2 keys_zone=cgi_one:10m inactive=2h max_size=2g;server {    listen   80;    server_name demo.xwsoul.com;    root /home/xwsoul/code/web/demo;    index index.html index.php;    # 清理 fastcgi_cache    location ~ /pcgi(/*) {        allow                127.0.0.1;        allow                192.168.2.0/24;        deny                 all;        fastcgi_cache_purge  cgi_one "$scheme$request_method$host$1";    }    try_files $uri @missing;    location @missing {        rewrite ^/cgi_cache/(.*) /cgi_cache/index.php?code=$1 last;    }    location ~ .*\.php$ {        # 默认情况下关闭cache        set $xwsoul_nocache yes;        # 请求的 URL 在 /cgi_cache/ 的允许缓存        if ($request_uri ~ ^/cgi_cache/) {            set $xwsoul_nocache "";        }        # CGI指向地址        fastcgi_pass             127.0.0.1:9000;        # 调用 cache 的命名空间        fastcgi_cache            cgi_one;        # 缓存触发的方法 HEADER, GET, POST 中的一个或多个        fastcgi_cache_methods    GET;        # 生成的缓存名称的 key 的名字        # $scheme https/http        # $request_method 请求方法,基于上面的设置,这里为GET        # $host 主机        # $request_uri 请求地址        fastcgi_cache_key        "$scheme$request_method$host$request_uri";        # 生效值: 即代理目标的状态码以及缓存时间        fastcgi_cache_valid      200 302 1h;        # 确定缓存成为过期数据的情况        fastcgi_cache_use_stale  error timeout invalid_header http_500;        # 请求过多少次相同的URL后, 缓存将开始        fastcgi_cache_min_uses   1;        # 关闭缓存        fastcgi_cache_bypass     $xwsoul_nocache;        fastcgi_no_cache         $xwsoul_nocache;        # 发送头信息到客户端 - 一般是浏览器        add_header               X-Cache "$upstream_cache_status";        # fastcgi 的其他参数配置        include                  fastcgi.conf;    }}

几个问题:

1. 为什么使用 set 变量控制 $xwsoul_nocache 来控制 fastcgi_cache_bypass(0.8x之后官方推荐的方法) 和 fastcgi_no_cache 参数确定是否生成缓存?

很简单, 因为不能是所有的页面都需要 cache.当然有更好的实现方法请尽量给建议.

2. 如果我在 /cgi_cache/ 下的脚本不需要缓存可以实现么, 怎么办?

这个也很简单, 通过 CGI 的返回的 Head 即可控制:
header('Cache-Control:no-cache, must-revalidate, max-age=0;');
header('Expires:0;');
均可实现.

3. 为什么缓存的 Cache Name 里需要 $scheme ?

因为 http/https 是不同的安全级别, 可能需要的缓存机制是不一样的!

最后附上对应访问的PHP测试脚本

';var_dump($code);echo '';$code = md5($code);$rand = mt_rand(1, 10);echo '

';echo 'Loop ', $rand, ' :

';for ($i = 0;$i < $rand;$i++) { echo $code, '
';}echo '

';echo date('Ymd H:i:s'), '
';

转载地址:http://fbsmb.baihongyu.com/

你可能感兴趣的文章
如何在cmd下,查找指定一个TXT文件的内容,把这个文本里包含关键字的所有行复制到一个新的文本中
查看>>
线程池和队列学习,队列在线程池中的使用,什么是队列阻塞,什么是有界队列
查看>>
复制集让mongodb的secondary支持读操作,因为存在读写延迟所以是否需要读写分离
查看>>
svn小乌龟怎么断开链接,怎么查看电脑中的隐藏文件,svn复制包或修改包名应注意什么
查看>>
一图读懂浏览器演变史 | 每日趣闻
查看>>
打造金融科技银行,招行的底气源自……
查看>>
火爆全网的动态曲线图是怎么做的?
查看>>
程序员感叹一年只能存下15万太少了……网友:潸然泪下
查看>>
文科出身敲出 Instagram,被小札“挤”走,建新冠追踪网站,这个程序员有点牛!...
查看>>
面对 Python,Java 中枪了 | 每日趣闻
查看>>
地方普通院校的计算机专业「科班」学生如何突围而出?| 原力计划
查看>>
小白也能看懂的 Java 异常处理
查看>>
C++ 是如何从代码到游戏的?
查看>>
程序员惊魂 12 小时:“���”引发线上事故
查看>>
调查了 10,975 位 Go 语言开发者,我们有了这些发现!
查看>>
太真实!深刻解读论文里的话术| 每日趣闻
查看>>
拿来就能用!Python 每天定时发送一句情话 | 原力计划
查看>>
Java“拍了拍”你,面试其实没那么难...
查看>>
帅爆了!3个月0基础转型头条数据分析师,他做对了什么?
查看>>
程序员:我受够了!不想再在小厂里干Java了!
查看>>