Nginx缩略图 - nginx image filter

1,目的

为了节省用户下载图片的流量,我们可以在适当的地方使用图片缩略图技术。

2,使用方式

原始图片url

http://xx.xx.xx.xx/xx/xx/abc.jpg

缩略图片url

http://xx.xx.xx.xx/xx/xx/abc.jpg!wxh[.jpg|.png]

最后面的.png|.jpg可选

如果希望width/height按比例缩放,设置为 -

1),限制图片返回的宽度最大为200

http://xx.xx.xx.xx/xx/xx/abc.jpg!200x-

2),限制图片返回的高度最大为200

http://xx.xx.xx.xx/xx/xx/abc.jpg!-x200

3),限制图片返回宽度不超过200,高度不超过300

http://xx.xx.xx.xx/xx/xx/abc.jpg!200x300

4),例子:

http://192.168.85.197/Mobile/jiefang/server/prod/upload/01.jpg                    805k

http://192.168.85.197/Mobile/jiefang/server/prod/upload/01.jpg!200x-           17k

http://192.168.85.197/Mobile/jiefang/server/prod/upload/02.png                    698k

http://192.168.85.197/Mobile/jiefang/server/prod/upload/02.png!200x200      79k

http://192.168.85.197/Mobile/jiefang/server/prod/upload/03.jpg                     300k

http://192.168.85.197/Mobile/jiefang/server/prod/upload/03.jpg!300x-            15k

3,原理

利用nginx image filter模块实时压缩图片

1),当访问的缩略图不存在,则根据原始图片实时生成对应尺寸的缩略图片,并把缩略图保存到磁盘。(图片缩放时会消耗部分CPU计算)

2),如果缩略图已经存在,则直接返回磁盘上的缩略图。

特点:支持缩略图写磁盘,不支持水印。

4,配置实现

#nginx-tomcat.conf    location ~ ^/Mobile/jiefang/* {
        root /home/wwwroot/ftp;
        set $width "-";
        set $height "-";
        if ( $uri ~ "/(.{1,}\..+)!([\d|-]+)x([\d|-]+).*" ) {
            set $width  $2;
            set $height $3;
            set $image_path $1;
        }
        set $image_uri thumb_image/$image_path?width=$width&height=$height;
        if (!-f $request_filename) {                                    #如果缩略图不存在,则实时生成。
            proxy_pass http://127.0.0.1/$image_uri;
            break;
        }
        proxy_store          on; #/home/wwwroot/ftp/$request_filename;  #on表示压缩后的文件保存在与源图片相同目录下。
        proxy_store_access   user:rw  group:rw  all:r;
        #proxy_temp_path      /tmp/images;
        proxy_set_header     Host $host;
        proxy_set_header     Content-Type image/jpeg;
    }
    location /thumb_image {
        alias /home/wwwroot/ftp;
        image_filter resize $arg_width $arg_height;
        image_filter_jpeg_quality 75;                                   # 压缩质量
        #image_filter_buffer 2m;                                        # 如果原始图片大小起过1m,则会报415错误
        if ( $request_filename ~ "/home/wwwroot/ftp/(.*)" ) {
            error_page 415 = http://$host/$1;                           # 如果出错,则使用原始图片
        }
        allow 127.0.0.0/8;
        deny all;
    }

nginx编译参数:

--with-http_image_filter_module

5,参考资料

http://nginx.org/en/docs/http/ngx_http_image_filter_module.html

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_store

https://github.com/3078825/ngx_image_thumb

时间: 2024-11-13 11:09:22

Nginx缩略图 - nginx image filter的相关文章

苹果下如果安装nginx,给nginx安装markdown第三方插件

用brew install nginx 这样安装的是最新版的nginx, 但是在有些情况下,安装第三方插件需要特定的版本,更高一级的版本可能装不上. 它的原理是下载安装包进行自动安装,建立软链,这样就会有nginx命令可以在控制台输出 用软件包安装 从官网下载需要的安装包,官网地址 nginx下载地址 下载下来,解压 tab键是补全文件名 .tar.gz 和 .tgz解压:tar zxvf FileName.tar.gz压缩:tar zcvf FileName.tar.gz DirName 进入

linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)

linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表里 面找master进程,它的编号就是主进程号. ps -ef | grep nginx 查看进程 cat /usr/local/nginx/nginx.pid 每次修改完nginx文件都要重新加载配置文件linux命令: /usr/local/nginx -t //验证配置文件是否合法 若ngin

深刻理解Nginx之Nginx完整安装

1.   Nginx安装 1.1预先准备 CentOS系统下,安装Nginx的库包依赖.安装命令如下: sudo yum groupinstall "DevelopmentTools" sudo yum install pcre pcre-devel sudo yum install zlib zlib-devel yum install perl-ExtUtils-Embed sudo yum install openssl openssl-devel 1.2 安装 最重要的特性和基

nginx之 nginx虚拟机配置

1.配置通过域名区分的虚拟机[[email protected] nginx]# cat conf/nginx.confworker_processes 1; events { worker_connections 1024;} http { include mime.types; default_type application/octet-stream; server { listen 80; server_name www.nginx01.com; location / { root ht

<nginx+PHP>nginx环境下配置支持php7

[[email protected] ~]# wget http://am1.php.net/get/php-7.1.2.tar.gz/from/this/mirror [[email protected] ~]# tar xzvf php-7.1.2.tar.gz [[email protected] ~]# cd php-7.1.2/ [[email protected] ~]# ./configure--prefix=/usr/local/php --enable-fpm [[email 

解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid

重新启动服务器,访问web服务发现无法浏览啦!登陆服务器之后进到nginx使用./nginx -s reload重新读取配置文件,发现报nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)错误,进到logs文件发现的确没有nginx.pid文件 [[email protected] sbin]# ./nginx -s reload nginx: [err

Nginx Announcing NGINX Plus R7

https://www.nginx.com/blog/nginx-plus-r7-released/?_ga=1.70204696.981062698.1445605275 https://www.nginx.com/ Announcing NGINX Plus R7 NGINX, Inc. is proud to announce the availability of NGINX Plus Release 7 (R7), the latest release of our applicati

深刻理解Nginx之Nginx与Python(1)

6 Python和Nginx 6.1 介绍FastCGI FastCGI(Fast Common Gateway Interface)是基于CGI上的改进,是CGI的一种演变产物.尽管目的是保持相同的,FastCGI在CGI上提供了重大的提升,通过建立起下面的原则. l  代替对于每个请求孵化一个新进程,FastCGI采用持久化进程,伴随着能够处理多个请求的能力. l  Web服务器和网关应用程序通过使用sockets比如TCP或者POSIXT 本地IPC sockets来交流.其结果是,它们的

使用Nginx、Nginx Plus抵御DDOS攻击

原创 2015-10-16 陈洋 运维帮 DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段. 一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢. 应用层DDOS攻击的特征 应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点.例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无