博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx 图片缓存
阅读量:6160 次
发布时间:2019-06-21

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

最近准备用nginx搭建了一个图片服务器,看中的就是nginx超强的静态文件处理能力。

由于图片量比较大,和web服务器(也是nginx)分开运行,虽然web服务器调用图片没用问题,但毕竟是远程调用,肯定没有本地文件系统那么快,因此仍然有优化的空间。

使用前的nginx配置

1
2
3
4
5
location ~* ^.+\.(js|ico|gif|jpg|jpeg|png|html|htm)$ {
    
log_not_found off;
    
access_log off;
    
expires 7d;
}

接下来就用到了nginx的proxy_store模块,让nginx 将取得的图片缓存在本地一个目录,下次就直接调用,(这让网页热点图片统计变得非常容易,讨厌日志分析的管理员肯定喜欢)

1
2
3
4
5
6
7
8
9
10
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {
           
log_not_found off;
           
expires 7d ;
           
access_log off;
           
proxy_store on;
           
proxy_store_access user:rw group:rw all:rw;
            
if 
( !-e $request_filename) {
           
proxy_pass  http:
//img
.example.com
           
}
}

默认的缓存路径位于 /var/cache/nginx/proxy_temp,里面将会保持图片服务器的目录结构

proxy_store 没有缓存过期,相当于镜像功能,这既是优点也是缺点,优点是访问快速,缺点是不知哪一天,硬盘会被撑爆,不过我们可以写个find脚本,定时清理一下缓存就OK了。

nginx还有一种缓存proxy_cache,它在设计上比proxy_store 更先进,采用内存+硬盘方式缓存,可以设置缓存大小和缓存过期。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
http {
    
,,,,,
    
proxy_cache_path 
/var/cache/nginx/cache 
levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
    
server {
    
........
        
location ~* ^.+\.(js|ico|gif|jpg|jpeg|png|html|htm)$ {
        
log_not_found off;
        
access_log off;
        
expires 7d;
        
proxy_pass http:
//img
.example.com ;
        
proxy_cache imgcache;
        
proxy_cache_valid 200 302 1d;
        
proxy_cache_valid 404 10m;
        
proxy_cache_valid any 1h;
        
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
        
}
    
}
}

上面的代码将会使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。

这种缓存方式为了更快的索引,采用hash分级来存储图片,图片目录结构和名称都变得面目全非,因此网页热点图片,必须通过其他途径统计,比如日志。

后一种方式更像一种正儿八经的缓存系统,应用相对更广,在性能上也更好。

本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1205129,如需转载请自行联系原作者
你可能感兴趣的文章
登记申请汇总
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
Spring常用注解
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Webpack 2 中一些常见的优化措施
查看>>