Nginx服务器上搭建图片缓存服务的基本配置解析
最近准备用nginx搭建了一个图片服务器,看中的就是nginx超强的静态文件处理能力。
由于图片量比较大,和web服务器(也是nginx)分开运行,虽然web服务器调用图片没用问题,但毕竟是远程调用,肯定没有本地文件系统那么快,因此仍然有优化的空间。
proxy_store
使用前的nginx配置
location~*^.+\.(js|ico|gif|jpg|jpeg|png|html|htm)${ log_not_foundoff; access_logoff; expires7d; }
接下来就用到了nginx的proxy_store模块,让nginx将取得的图片缓存在本地一个目录,下次就直接调用,(这让网页热点图片统计变得非常容易,讨厌日志分析的管理员肯定喜欢)
location~.*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)${ log_not_foundoff; expires7d; access_logoff; proxy_storeon; proxy_store_accessuser:rwgroup:rwall:rw; if(!-e$request_filename){ proxy_passhttp://img.example.com } }
默认的缓存路径位于/var/cache/nginx/proxy_temp,里面将会保持图片服务器的目录结构
proxy_store没有缓存过期,相当于镜像功能,这既是优点也是缺点,优点是访问快速,缺点是不知哪一天,硬盘会被撑爆,不过我们可以写个find脚本,定时清理一下缓存就OK了。
nginx还有一种缓存proxy_cache,它在设计上比proxy_store更先进,采用内存+硬盘方式缓存,可以设置缓存大小和缓存过期。
proxy_cache
proxy_cache有一个问题就是,proxy_cache不能清除指定的URL缓存,只能设置URL过期时间,但是有问题,有人就会很快解决问题,nginx第三方模块ngx_cache_purge能清除指定URL。
nginx安装时需要将ngx_cache_purege加载进去。
./configure--user=www--group=www--add-module=/root/dxm/nginx/ngx_cache_purge-1.2
其中,/root/dxm/nginx/ngx_cache_purge-1.2为ngx_cache_purge解压路径(附件中提供ngx_cache_purgetar包下载)
现在来一段实例,实现图片缓存:
话说proxy_tem_path,与proxy_cache_path必须在同一个分区之下!
proxy_temp_path/usr/local/nginx/proxy_temp; proxy_cache_path/usr/local/nginx/proxy_cache_pathlevels=1:2keys_zone=cache_one:200minactive=1dmax_size=1g; upstreamtomcat_server{ server127.0.0.1:8080; } server{ listen192.168.154.128; server_namewww.wolf.com; location~.*\.(gif|jpg|jpeg|png|bmp|swf)$ { proxy_cachecache_one; proxy_cache_methodsGETHEADPOST; proxy_cache_min_uses1; proxy_cache_valid20030210m; proxy_cache_valid4041m; proxy_cache_validany1m; proxy_cache_key"$host:$server_port$uri$is_args$args"; proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_passhttp://tomcat_server; } location~.*\.(jsp)${ proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_passhttp://tomcat_server; } location~/purge(/.*) { allow192.168.154.128; allow192.168.154.1; denyall; proxy_cache_purgecache_one$host:$server_port$1$is_args$args; }
恩,静态页面缓存,动态请求不缓存!
大家看一下最后一段的那个purege配置,很显然,表示哪些IP可以手动清除指定的URL
比如,www.nhooo.com/1.jpg可以访问到我的图片,那么用www.wolfdream.cn/purge/1.jpg 就可以清除图片缓存了。