Nginx 限定略缩图片大小配置

nginx 利用image_fillter 模块可以实现实时的图片略缩和裁剪功能。但是根据之前的网上的配置,对于前端来说请求过于复杂。所以这里限定几种略缩图的大小供前端调用。

在此之前的配置请看:https://blog.wangjunfeng.com/archives/669

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
location ~ (.+)\.(jpg|gif|png|jpeg)@(large|middle|small)$ {
# 限制referer,防盗链
valid_referers *.example.com;
if ($invalid_referer) {return 403;}
set $size $3;
set $image_path $1.$2; #真实图片地址
set $cache_path $1_resize_$3.$2; #临时文件地址

set $image_uri /image-resize/$image_path?w=$size;
if (-f $document_root$cache_path) {
rewrite (.+)\.(jpg|gif|png|jpeg)@(large|middle|small)$ $1_resize_$3.$2;
break;
}
if (!-f $document_root$cache_path) {
proxy_pass http://$server_name$image_uri;
break;
}
proxy_store $document_root$cache_path;
proxy_store_access user:rw group:rw all:r;
proxy_set_header Host $host;
expires 10d; # 设置图片过期时间10天
}

location ~ /image-resize(.+)\.(jpg|gif|png|jpeg) {
if ($arg_w = large){
set $w 750;
set $h 750;
}
if ($arg_w = middle){
set $w 400;
set $h 400;
}
if ($arg_w = small){
set $w 100;
set $h 100;
}
rewrite /image-resize(.+)\.(jpg|gif|png|jpeg)$ $1.$2 break;
image_filter resize $w $h;
image_filter_jpeg_quality 100;
image_filter_buffer 10M;
try_files $1.$2 /notfound.jpg;
}

说明

访问
http://www.examle.com/test.jpg@large

将得到一张等比例缩放,宽750的图片,并且保存到硬盘。文件名为test_resize_large.jpg,下次请求就可以直接找到这张图片不用nginx再做处理了。
其他大小的图片以此类推,你也可以根据实际情况自定义大小。

坚持原创技术分享,您的支持将鼓励我继续创作!