/ 中存储网

Nginx服务器配置图片站点的技巧

2014-04-14 10:36:01 来源:itjs.cn
应用场景:

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;

}