nginx 图片缓存

简介:

最近准备用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,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
存储 缓存 Java
Openresty(lua+nginx)-Guava-Redis做多级缓存
Openresty(lua+nginx)-Guava-Redis做多级缓存
108 1
|
缓存 应用服务中间件 nginx
百度搜索:蓝易云【nginx反向代理缓存教程。】
现在,nginx已经配置了反向代理缓存。它将缓存后端服务器的响应,并在下次请求时直接提供缓存的响应,减轻后端服务器的负载并提高性能。
227 1
|
6月前
|
缓存 应用服务中间件 nginx
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
这篇文章讨论了在使用Nginx进行动静分离时遇到的静态资源更新不及时的问题。问题描述了在服务器上更新静态资源后,访问页面时页面没有显示更新的情况。文章提供了解决这个问题的方法,即清除浏览器缓存,并提供了相关参考文章链接。此外,还展示了问题复现的步骤和正常情况的预期结果。
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
|
4月前
|
存储 缓存 监控
|
4月前
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
135 4
|
4月前
|
存储 缓存 NoSQL
Nginx缓存
Nginx缓存
38 2
|
6月前
|
缓存 应用服务中间件 nginx
[nginx]proxy_cache缓存系统
[nginx]proxy_cache缓存系统
153 4
|
7月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
208 1
|
7月前
|
监控 应用服务中间件 nginx
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
|
7月前
|
应用服务中间件 nginx 缓存
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决