nginx中配置图片访问的技巧

应用场景:
uploads目录是用来存放上传到服务器的图片文件的根目录,在根目录下可能存在分类的文件夹,在这些文件夹中存放原始图片例如src.jpg, 同时可能存在该图片的对应的小图s_src.jpg。
假设uploads下的busipic文件夹下有a.jpg,s_a.jpg,b.jpg,default.jpg,servername为www.exam.com
如果访问www.exam.com/uploads/busipic/s_a.jpg返回www.exam.com/uploads/busipic/s_a.jpg,
访问www.exam.com/uploads/busipic/s_b.jpg返回www.exam.com/uploads/busipic/b.jpg,
访问www.exam.com/uploads/busipic/b.jpg返回www.exam.com/uploads/busipic/b.jpg,
访问www.exam.com/uploads/busipic/s_aaa.jpg返回www.exam.com/uploads/busipic/default.jpg
访问www.exam.com/uploads/busipic/返回www.exam.com/uploads/busipic/default.jpg
访问www.exam.com/uploads/busipic/dfdf.jpg返回www.exam.com/uploads/busipic/default.jpg


#访问小图
location ~ ^/uploads/(.*)?/s_.*$ {
root html;

if (!-f $request_filename) { #小图片不存在情况
rewrite ^(/uploads/.*/)s_(.*)$ $1$2 last; #去掉url中的s_,使其访问大图,注意此处必须用last,不能用break,因为last会对server标签重新发起请求,而break就直接使用当前的location中的数据源来访问

}
}


#访问原图,如果原图片不存在,就给出当前目录下的缺省图片,要是当前目录下没有缺省图片,就返回指定目录下的缺省图片(确保指定目录目录存在该文件)
#原图对应的小图是以s_加上原图名字
location ~ ^/uploads/busipic {
root html;
index default.jpg;

if (!-f $request_filename) { #原图片不存在,返回前当目录下的缺省图片
rewrite ^(/uploads/.*/).*$ $1default.jpg break;
}

error_page 404 =200 /default.jpg; #当目录下的缺省图片不存在时,返回一个指定的缺省文件,确保存在此文件,否则可能进入死循环 注意(404 =200)404后有一个空格,要不然配置会报错,这样的配置是把客户端看到的404 改为200
}


干净的配置项

location ~ ^/uploads/(.*)?/s_.*$ {
root html;
index default.jpg;

if (!-f $request_filename) {
rewrite ^(/uploads/.*/)s_(.*)$ $1$2 last;

}
}

location ~ ^/uploads/busipic {
root html;
index default.jpg;

if (!-f $request_filename) {
rewrite ^(/uploads/.*/).*$ $1default.jpg break;

}

error_page 404 =200 /test/default.jpg;

log_format main2 '$status ' '"$request_filename" no s_';
access_log logs/host.log main2;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值