nginx图片服务器配置技巧分享

发布时间:2020-06-04编辑:脚本学堂
本文介绍了nginx配置图片服务器方面的一些技巧,包括图片目录配置、访问小图与原图的技巧等,有需要的朋友参考下。

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