一场关于 thumbor 涉及到的Nginx 转发需求
需求: 1> 在一个图片 url 后面添加: ?resize=axb (a b 任意数字) 返回缩略图尺寸,url 保持不变 2> 在一个图片 url 后面添加: ?stype=xxlarge 返回以下产品规定的 xxlarge 尺寸大小 3> 在一个图片 url 中 类型_图片.jpg 返回产品规定的尺寸大小 1张图片: http://thumbor-myimage.testrenren.tagtic.cn/donewsfiles/20200708/1555/0e0f495c-918e-4356-aade-cf9e7efbedfc.jpeg 通过缩略图: 尺寸规则如下: 1. xxlarge=1600x10240 xlarge=1024x10240 large=720x10240 main=200x600 head=100x300 tiny=50x50 origin=原图尺寸 2. resize=axb 尺寸 如:http://thumbor-myimage.testrenren.tagtic.cn/donewsfiles/20200708/1555/0e0f495c-918e-4356-aade-cf9e7efbedfc.jpeg?resize=100x300 返回 100x300 的缩略图尺寸 http://thumbor-myimage.testrenren.tagtic.cn/donewsfiles/20200708/1555/0e0f495c-918e-4356-aade-cf9e7efbedfc.jpeg?stype=main 返回 main 规定的缩略图尺寸 http://thumbor-myimage.testrenren.tagtic.cn/donewsfiles/20200708/1555/main_0e0f495c-918e-4356-aade-cf9e7efbedfc.jpeg 返回 main 规定的缩略图尺寸
thumbor 服务已经部署完毕,可以正常使用; 部署 Nginx; 因图片需要上cdn ,因此nginx 配置中不能涉及到 rewrite 规则,只能用 proxy_pass ;以下为 nginx 转发规则: upstream mybaidu { server 10.16.0.237:31009; # 缩略图服务 } server { server_name thumbor-myimage.testrenren.tagtic.cn; #内网测试域名 sendfile off; location / { root /usr/local/nginx/html/; ssi on; ssi_silent_errors on; ssi_types text/shtml; index index.html; proxy_hide_header Content-Type; resolver 10.4.1.14; } # 第一个Location 内容主要匹配第三个需求,即 _图片.jpg, $1 $2 $3 $4 分别为 Location 当中括号里面内容,为图片的具体路径; location ~ ^/(\w+)/(\d+)/(\d+)/main_(.+\.(jpeg|jpg|gif|png)) { set $def /unsafe/200x600/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; proxy_pass http://mybaidu$def; } location ~ ^/(\w+)/(\d+)/(\d+)/xxlarge_(.+\.(jpeg|jpg|gif|png)) { set $def /unsafe/1600x10240/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; proxy_pass http://mybaidu$def; } location ~ ^/(\w+)/(\d+)/(\d+)/xlarge_(.+\.(jpeg|jpg|gif|png)) { set $def /unsafe/1024x10240/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; proxy_pass http://mybaidu$def; } location ~ ^/(\w+)/(\d+)/(\d+)/large_(.+\.(jpeg|jpg|gif|png)) { set $def /unsafe/720x10240/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; proxy_pass http://mybaidu$def; } location ~ ^/(\w+)/(\d+)/(\d+)/head_(.+\.(jpeg|jpg|gif|png)) { set $def /unsafe/100x300/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; proxy_pass http://mybaidu$def; } location ~ ^/(\w+)/(\d+)/(\d+)/tiny_(.+\.(jpeg|jpg|gif|png)) { set $def /unsafe/50x50/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; proxy_pass http://mybaidu$def; } location ~ ^/(\w+)/(\d+)/(\d+)/origin_(.+\.(jpeg|jpg|gif|png)) { set $def /unsafe/0x0/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; proxy_pass http://mybaidu$def; } # 第二个Location 内容主要匹配 第一个、第二个 规则,默认返回原图, 根据if 判断进行变量赋值; location ~ ^/(\w+)/(\d+)/(\d+)/(.+\.(jpeg|jpg|gif|png)) { set $abc /unsafe/0x0/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; if ($arg_resize != "") { set $abc /unsafe/$arg_resize/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; } if ($arg_stype = "xxlarge") { set $abc /unsafe/1600x10240/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; } if ($arg_stype = "main") { set $abc /unsafe/200x600/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; } if ($arg_stype = "xlarge") { set $abc /unsafe/1024x10240/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; } if ($arg_stype = "large") { set $abc /unsafe/720x10240/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; } if ($arg_stype = "head") { set $abc /unsafe/100x300/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; } if ($arg_stype = "tiny") { set $abc /unsafe/50x50/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; } if ($arg_stype = "origin") { set $abc /unsafe/0x0/thumbor-image.testrenren.tagtic.cn/$1/$2/$3/$4; } #add_header aa $abc; proxy_pass http://mybaidu$abc; }