在项目最开始,上传图片的时候,服务器先保存原图再使用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. WTH统计

    SELECT t2.MasterName AS '类型',SUM(t1.DailyCount) AS '数量',(CASE T2.MasterName WHEN '电子阅读' THEN '篇' WHE ...

  2. eureka -2 - 重要配置

    Server 端配置 eureka.client.registerWithEureka :是否将自己注册到Eureka Server,默认是true,如果是单节点部署,切是server端,则设置成fa ...

  3. 怎样安装 OpenJDK 8 in Ubuntu 14.04 & 12.04 LTS

    OpenJDK Java 8 has been made into official Ubuntu repositories for 14.10 Utopic and higher. For Ubun ...

  4. Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。

    <html> <head> <title>Js日期选择器并自动加入到输入框中</title> <meta http-equiv="con ...

  5. L146 Space Station Hole Cause Will Be Determined

    The head of the U.S. space agency said Tuesday he's sure that investigators will determine the cause ...

  6. ionic安装插件常用命令

    常见插件查找网站: http://ngcordova.com/docs/plugins http://cordova.apache.org/plugins/ $ ionic plugin list / ...

  7. Leetcode 590. N-ary Tree Postorder Traversal

    DFS,递归或者栈实现. """ # Definition for a Node. class Node: def __init__(self, val, childre ...

  8. CMake入门实践

    为了更好的代码管理,选择一款make工具非常重要,cmake取百家之长,现在在github上已经是工程管理的常客了,最大的优势是跨平台.本文将避开理论,直接教你如何在windows和linux上实现c ...

  9. CentOS6 mail邮件服务配置

    mail服务配置 环境: [root@m01 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@m01 ~]# uname -m ...

  10. 【剑指offer】整数中1出现的次数,C++实现

    原创博文,转载请注明出处!本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 # 题目 # 思路 分析1在数字中出现的规律.设数字N = abcde ,其中abcde分别为十进制中各位 ...