
在此之前先了解 Cloudflare CDN加速緩存状态cf-cache-status的5种状态
cf-cache-status:HIT:你的文件已经命中CF缓存。这表示用户获取文件的方式途径为从CF缓存服务器中获取而非你的源服务器,不消耗你的服务器资源。
cf-cache-status:MISS:CF已经在缓存服务器中查找了你所请求的文件,但是并没有找到,CF的缓存服务器将会回源至你的服务器中获取该文件,当下次请求时该文件就会显示HIT
cf-cache-status: BYPASS:CF已经被要求不缓存该文件,用户将直接从网站源服务器中获取文件,这个通常是因为请求的文件响应了NO-Cache header
cf-cache-status:EXPIRED:自上次缓存之后,文件的缓存期限已经过期,CF将会再度回源至网站源服务器进行获取文件,当下次请求时该文件就会显示HIT
cf-cache-status:DYNAMIC:这个文件默认不会缓存,也没有对应的缓存配置,用户将从网站源服务器获取该文件。
起因
起因:图片经过压缩加水印等处理后输出到浏览器,但处理后的图片或HTML,Cloudflare不会缓存,这就是问题所在!
经过博主的反复测试:添加响应头,所有响应头跟nginx静态请求时一模一样,但结果都是 DYNAMIC 😞😞😞,只有在服务nginx不走php的情况下,cf-cache-status才会出现HIT,相反,一旦使用了php,所以的请求响应都会是cf-cache-status:DYNAMIC(不缓存) ,可能是博主的研究还不够透切,如有高人知道,请指点,不胜感激!!
无奈,只能使用一个折中的办法,第一次生成的文件放入缓存文件夹并直接响应 ,第二次响应则由 nginx的 try_files来调用缓存 ,不走php
生成缓存文件,统一放入缓存文件夹
# mkdir /www/cache
# chmod 777 /wwww/cache
//软链接
# ln -s /storage/cache(存在) /usr/share/xxxxx/public/cache(不存在)
ln -s /usr/share/nginx/html/77book.cn/mix.77book.cn/artisan /root/artisan
测试html是否请求成功
https://xxxx.net:/cache/$host_path/xxx/xxx.jpg
Nginx配置
.....
try_files $uri /cache/$host/$uri /index.php?$uri&$args;
.....
完成
后记,nginx输出的图片都是DYNAMIC,看来 Cloudflare缓存机制有点神奇