在项目最开始,上传图片的时候,服务器先保存原图再使用ImageMagick生成上传图片缩略图,这种方法有很多缺点,例如生成的缩略图的大小是固定的,不能动态请求指定大小的缩略图。

虽然有非常多的图片云存储服务,例如 七牛、UpYun、Aliyun OSS 等,但是因为一些其他的考虑(例如:价格因素),我们最后还是选择本地存储。

通过调研,发现nginx可以动态请求缩略图。但是网上的教程都是针对Linux系统下的,几经周折终于在Windows系统下编译nginx并成功搭建nginx图片服务器。

点击下载进入nginx下载页,Windows系统可以直接点击nginx/Windows-a.b.c下载编译好的程序,解压之后即可使用,Linux系统需要点击nginx-a.b.c下载源码并编译后才能使用。

编译Nginx

ngx_http_image_filter_module模块是一个转换JPEG、GIF、PNG、WebP格式图片的过滤器,如果需要使用ngx_http_image_filter_module等非默认编译的模块,则需要重新编译nginx源码。

编译需求

在Microsoft Win32平台上构建nginx你需要:

  • 微软 Visual C 编译器。
  • MSYS 。
  • Perl,如果你想构建OpenSSL,让nginx支持SSL。例如 ActivePerl 或 Strawberry Perl 。
  • Mercurial 客户端。
  • PCRE 、zlib 和 OpenSSL 库源码,注意这里是PCRE不是PCRE2 。
  • libgd ,编译ngx_http_image_filter_module模块依赖项。

编译

在开始构建之前确保PerlMercurialMSYS的bin目录添加到PATH环境变量中。

  • 从 Visual C 目录运行vcvarsall.bat脚本用以设置 Visual C 运行环境。以管理员身份运行命令行工具,运行vcvarsall.bat脚本(根据你的实际路径):

    "D:\Program Files\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
  • 如果需要编译ngx_http_image_filter_module模块则需要编译libgd,编译方法详见Building on Windows with Visual Studio 2015 。
  • 运行msys.bat ,本人使用的是MSYS2 。
  • hg.nginx.org库签出nginx源代码(这里会用到上面提到的Mercurial客户端):

    $ hg clone http://hg.nginx.org/nginx
  • 在下载的nginx目录中,创建一个用户构建的objs目录和用于存放第三方库源码的lib目录,解压zlib 、PCREOpenSSL库源码到lib目录

    $ mkdir objs
    $ mkdir objs/lib
    $ cd objs/lib
    $ tar -xzf ../../pcre-8.40.tar.gz
    $ tar -xzf ../../zlib-1.2.11.tar.gz
    $ tar -xzf ../../openssl-1.0.2k.tar.gz
  • 执行which perl命令,确保使用的Perl是上面下载安装的而不是MSYS自带的,执行which link命令,确保使用的link.exe是Visual自带的。将MSYS环境下的perl.exrelink.exre分别重命名为perl_UNUSED.exeink_UNUSED.exe 。可以使用下面的命令查看、修改环境变量。

    $ echo $PATH
    $ export PATH=/c/Perl/bin:$PATH
    $ export PATH="/d/Program Files/Microsoft Visual Studio 14.0/VC/bin":$PATH
  • 如果要编译ngx_http_image_filter_module模块则打开nginx源码目录下的auto/feature文件,将

    # -x Linux系统下检查文件是否有执行权限,Windows系统下不适用
    if [ -x $NGX_AUTOTEST ]; then
    • 修改为
    if [ YES ]; then
  • 如果要编译ngx_http_image_filter_module模块则打开nginx源码目录下的auto/lib/libgd/conf文件,在适当的位置添加下面几行代码

        ngx_feature="GD library"
    ngx_feature_name=
    ngx_feature_run=no
    ngx_feature_incs="#include <gd.h>"
    ngx_feature_path=
    ngx_feature_libs="-lgd"
    ngx_feature_test="gdImagePtr img = gdImageCreateFromGifPtr(1, NULL);"
    . auto/feature # 添加下面的代码片段
    if [ $ngx_found = no ]; then ngx_feature="GD library in custom path"
    # 指定libgd头文件位置
    ngx_feature_path="/e/thirdparty_source/libgd-2.2.4/src"
    # 指定libgd库文件位置和库文件
    ngx_feature_libs="-L/e/thirdparty_source/gdbuild -lgd"
    . auto/feature fi
  • 运行configure脚本:

    $ auto/configure --with-cc=cl --builddir=objs --prefix= \
    --conf-path=conf/nginx.conf --pid-path=logs/nginx.pid \
    --http-log-path=logs/access.log --error-log-path=logs/error.log \
    --sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp \
    --http-proxy-temp-path=temp/proxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp \
    --with-cc-opt="-DFD_SETSIZE=1024 -Ie:/thirdparty_source/libgd-2.2.4/src" \
    --with-pcre=objs/lib/pcre-8.40 --with-zlib=objs/lib/zlib-1.2.11 \
    --with-openssl=objs/lib/openssl-1.1.0d --with-select_module --with-http_ssl_module \
    --with-http_image_filter_module --with-ld-opt="E:/thirdparty_source/gdbuild/libgd.lib"
  • 在Visual 2015命令行工具中执行nmake -f objs/Makefile命令完成编译,编译成功后生成nginx.exe文件。

如果编译openssl时出现 error A2070:invalid instruction operands错误,则可能是因为是因为openssl-1.1.0之前版本(使用汇编)编译时需要NASM ,最简单的方法是使用openssl-1.1.0以上版本重新配置编译。

Nginx的使用

可在命令行中通过命令操作nginx:

$ start nginx        # 运行nginx
$ nginx -s stop # 停止nginx
$ nginx -s reload # 重新加载配置文件(如修改配置文件后,可通过该命令重新加载)
$ nginx -s quit # 退出nginx
$ nginx -v # 查看nginx版本

更多帮助信息可以查看 nginx for Windows 和 Beginner’s Guide 。

配置图片服务器

配置图片服务器的步骤如下:

  • 在本地建了一个文件夹,例如:H:/www/imgs,里面放了几张测试图片。
  • nginx/html下创建一个名为imgs文件夹(实际访问的不是这个路径,经测试此步在Windows下非必要)

    mkdir $(nginx-dir)/html/imgs
  • 修改$(nginx-dir)/conf/nginx.conf在默认的server节点里再添加一个location节点并指定实际路径,修改后的配置文件部分内容如下:

    http {
    ...
    server {
    listen 80;
    server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {
    root html;
    index index.html index.htm;
    } # 设置图片目录
    location /imgs/ {
    root H:/www; # 路径“H:/www”下必须含有一个“imgs”目录
    autoindex on; # 如果为on,那么就发送请求地址对应的服务端路径下的文件列表给客户端
    } # 图片剪裁 crop
    # 按比例缩放 resize
    # 访问链接 http://t.cn/imgs_thumb/20170214152753.jpg?type=crop&width=100&height=100
    location ~* /imgs_thumb/(.+)$ {
    set $filename $1; if ($filename = "") {
    break; # 同return 404;
    } set $img_type $arg_type;
    set $img_w $arg_width;
    set $img_h $arg_height; if ($img_type = "") {
    return 400;
    } if ($img_w = "") {
    return 400;
    } if ($img_h = "") {
    return 400;
    } rewrite ^ /imgs_$img_type;
    } # 缩放图片的处理
    location /imgs_resize/ {
    alias H:/www/imgs/$filename;
    image_filter resize $img_w $img_h;
    } # 剪裁图片的处理
    location /imgs_crop/ {
    alias H:/www/imgs/$filename;
    image_filter crop $img_w $img_h;
    } # 设置视频目录
    location /videos {
    root H:/www;
    autoindex on;
    }
    }
    }
  • 修改完后需要重新启动nginx或重新加载配置文件即可。

推荐教程:
Nginx开发从入门到精通

参考教程:
Nginx开发从入门到精通
Module ngx_http_image_filter_module
Nginx图片剪裁模块探究
Building nginx on the Win32 platform with Visual C
Compile nginx with visual studio
nginx架构详解(50%)
Linux下nginx编译安装教程和编译参数详解
Nginx图片剪裁模块探究 http_image_filter_module
利用 Nginx 的 ngx_http_image_filter_module 做实时的图片缩略图

Windows下搭建Nginx图片服务器的更多相关文章

  1. 第一次项目上Linux服务器(八:——搭建Nginx图片服务器)

    一.准备工作 安装Nginx,参考历史博客 二.搭建Nginx图片服务器 1.效果 例如:图片通过xftp服务上传到/home/java/upload目录下,我想通过访问Nginx服务器来访问xftp ...

  2. 【图片服务器】搭建Nginx图片服务器

    一.安装Nginx 二.安装vsftpd 三.开始搭建Nginx图片服务器 1.效果 例如:图片通过ftp服务上传到/home/ftpuser/www/images目录下,我想通过访问Nginx服务器 ...

  3. 搭建Nginx图片服务器

    搭建Nginx图片服务器 Part-I 安装Nginx 安装PCRE 下载 ngx_cache_purge 并解压,用来清除缓存 下载Nginx并解压 cd nginx-1.7.7 编译,--pref ...

  4. windows下搭建nginx+php开发环境

    windows下搭建nginx+php开发环境 1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: ...

  5. Windows下搭建本地SVN服务器【转】

    转自:http://www.linuxidc.com/Linux/2015-01/111563.htm 本文介绍Windows下搭建本地SVN服务器的方法,网上资料比较少也比较旧,大都介绍的是旧版本S ...

  6. 搭建Nginx图片服务器(Linux)

    知识点: 在Linux系统上安装Nginx服务器,配置图片访问路径 通过ftp上传图片到,指定路径,通过浏览器访问指定路径中的图片 参考博客:http://blog.csdn.net/maoyuanm ...

  7. windows下搭建nginx+php+laravel开发环境(转)

    1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: 1) 下载 nginx1.14.0(版本根据自 ...

  8. 基于Docker搭建Nginx图片服务器

    前言 一般开发中,都会把图片上传到一个目录,然后将目录和文件名拼接存储在数据库中,但是,这种方法如果没弄好的话可能有一定的缺陷. 若项目搬迁,即时这台服务器本身还在用,存放在服务器的跟项目相关的图片也 ...

  9. Windows下搭建HTTP/HTTPS服务器及测试过程

    1 安装Apache http://www.apachehaus.com/cgi-bin/download.plx 选择合适的版本下载 本次下载的是 Apache 2.4.x VC14 Apache版 ...

随机推荐

  1. vux配置i18n

    根据使用文档,先引入i18n import VueI18n from 'vue-i18n'; Vue.use(VueI18n) const i18n = new VueI18n({ locale: ' ...

  2. Windows下安装tomcat

    一.Tomcat下载与安装: 1.直接到官网下载Tomcat安装程序包:http://tomcat.apache.org/ 2.下载下来后是个压缩包,如:apache-tomcat-8.0.26,解压 ...

  3. Sqlserver 存储过程 返回-6

    存储过程中没有返回 手动返回-6的代码,但是一直接收到-6返回值. 经最后研究发现,是粗心导致的,Insert插入数据时在非空字段插入了Null值导致出现异常,所以返回了-6. 所以说在事务中,可能会 ...

  4. 在线机器学习FTRL(Follow-the-regularized-Leader)算法介绍

    看到好文章,坚决转载!哈哈,学术目的~~ 最近几个同事在做推荐平台的项目,都问到怎么实现FTRL算法,要求协助帮忙实现FTRL的算法模块.今天也是有空,赶紧来做个整理.明天还要去上海参加天善智能组织的 ...

  5. 细说并发5:Java 阻塞队列源码分析(下)

    上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

  6. OPEN(SAP) UI5 学习入门系列之三:MVC (下) - 视图与控制器

    继续来学习UI5的MVC模型吧,这次我们来探讨视图与控制器. 1 视图 在MVC中,视图用来定义和渲染UI.在UI5中,视图的类型是可以自定义的,除了以下预定义的四种视图类型之外,你也可以定制自己的视 ...

  7. 【商业源码】生日大放送-Newlife商业源码分享 -转

    http://www.cnblogs.com/asxinyu/p/3225179.html   今天是农历六月二十三,是@大石头的生日,记得每年生日都会有很劲爆的重量级源码送出,今天Newlife群和 ...

  8. 【剑指offer】二叉搜索树转双向链表,C++实现

    原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...

  9. dom4j 改变XML声明和编码格式

    dom4j 改变XML编码 Element rootElement = document.addElement("data"); document.setXMLEncoding(& ...

  10. linux自学(五)之开始centos学习,Xshell远程连接

    上一篇:linux自学(四)之开始centos学习,网络配置 前面操作都是在电脑中的虚拟机上操作的,比较麻烦,需要来回切换.下面我将使用远程连接工具Xshell进行操作,Xshell直接百度下载即可. ...