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

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

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

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

使用前的nginx配置

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

 

   
接下来就用到了nginx的proxy_store模块,让nginx 将取得的图片缓存在本地一个目录,下次就直接调用,(这让网页热点图片统计变得非常容易,讨厌日志分析的管理员肯定喜欢)
 
 
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 更先进,采用内存+硬盘方式缓存,可以设置缓存大小和缓存过期。

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分级来存储图片,图片目录结构和名称都变得面目全非,因此网页热点图片,必须通过其他途径统计,比如日志。

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

 

文章转载自:http://purplegrape.blog.51cto.com/1330104/1205129

转载于:https://www.cnblogs.com/wpjamer/articles/7124087.html

你可能感兴趣的文章
调整数组顺序使奇数位于偶数前
查看>>
How to stop looking for someone perfect and find someone to love
查看>>
Vue method与computed的区别
查看>>
Android 图片圆角的设置
查看>>
TCP与UDP的区别
查看>>
Javascript获取日期和星期
查看>>
xml字符串转xml对象,xml对象转json对象
查看>>
AttributeError: 'NoneType' object has no attribute 'split' 报错处理
查看>>
PYTHON——多线程:同步条件(Event)
查看>>
ThinkCMF变量输出+使用函数
查看>>
0505.Net基础班第十三天(面向对象多态)
查看>>
Oracle 分页查询
查看>>
微信开发之模板消息
查看>>
[python机器学习及实践(2)]Sklearn实现朴素贝叶斯
查看>>
SQL Server不存在或拒绝访问故障的排除
查看>>
java多线程(二)——锁机制synchronized(同步方法)
查看>>
(原创)在service中定时执行网络操作的几点说明
查看>>
[Javascript]XMLHttpRequest对象实现下载进度条
查看>>
UVA-572-搜索基础题
查看>>
iBeacon技术
查看>>