Windows下搭建Nginx图片服务器
在项目最开始,上传图片的时候,服务器先保存原图再使用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
模块依赖项。
编译
在开始构建之前确保Perl
、Mercurial
和MSYS
的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
、PCRE
和OpenSSL
库源码到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.exre
和link.exre
分别重命名为perl_UNUSED.exe
和ink_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图片服务器的更多相关文章
- 第一次项目上Linux服务器(八:——搭建Nginx图片服务器)
一.准备工作 安装Nginx,参考历史博客 二.搭建Nginx图片服务器 1.效果 例如:图片通过xftp服务上传到/home/java/upload目录下,我想通过访问Nginx服务器来访问xftp ...
- 【图片服务器】搭建Nginx图片服务器
一.安装Nginx 二.安装vsftpd 三.开始搭建Nginx图片服务器 1.效果 例如:图片通过ftp服务上传到/home/ftpuser/www/images目录下,我想通过访问Nginx服务器 ...
- 搭建Nginx图片服务器
搭建Nginx图片服务器 Part-I 安装Nginx 安装PCRE 下载 ngx_cache_purge 并解压,用来清除缓存 下载Nginx并解压 cd nginx-1.7.7 编译,--pref ...
- windows下搭建nginx+php开发环境
windows下搭建nginx+php开发环境 1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: ...
- Windows下搭建本地SVN服务器【转】
转自:http://www.linuxidc.com/Linux/2015-01/111563.htm 本文介绍Windows下搭建本地SVN服务器的方法,网上资料比较少也比较旧,大都介绍的是旧版本S ...
- 搭建Nginx图片服务器(Linux)
知识点: 在Linux系统上安装Nginx服务器,配置图片访问路径 通过ftp上传图片到,指定路径,通过浏览器访问指定路径中的图片 参考博客:http://blog.csdn.net/maoyuanm ...
- windows下搭建nginx+php+laravel开发环境(转)
1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: 1) 下载 nginx1.14.0(版本根据自 ...
- 基于Docker搭建Nginx图片服务器
前言 一般开发中,都会把图片上传到一个目录,然后将目录和文件名拼接存储在数据库中,但是,这种方法如果没弄好的话可能有一定的缺陷. 若项目搬迁,即时这台服务器本身还在用,存放在服务器的跟项目相关的图片也 ...
- Windows下搭建HTTP/HTTPS服务器及测试过程
1 安装Apache http://www.apachehaus.com/cgi-bin/download.plx 选择合适的版本下载 本次下载的是 Apache 2.4.x VC14 Apache版 ...
随机推荐
- C# 中移动文件到指定位置
根据文件后缀名称将文件移动到指定的文件夹下面,具体代码如下: demo中使用的是 .png 具体的情况根据你的需求可以更改 using System; using System.IO; public ...
- MySQL Index Condition Pushdown
Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式.[Index Condition Pushdown] ...
- 关于python中urllib.urlencode的时候出错:UnicodeEncodeError: ‘ascii’的记录
原文我参见了:http://hi.baidu.com/setcookie/item/ddc6b694b1f13435336eeb3c 为毛我要费事的写下了,就是为了让自己记录一下,下面的也是直接摘录过 ...
- iOS跳转支付宝付款码和扫一扫页面
iOS跳转支付宝付款码和扫一扫页面 // 是否支持支付宝 NSURL * myURL_APP_A = [NSURL URLWithString:@"alipay://"]; if ...
- TensorFlow 的使用步骤
使用 TensorFlow 的基本步骤 学习目标: 学习基本的 TensorFlow 概念 在 TensorFlow 中使用 LinearRegressor 类并基于单个输入特征预测各城市街区的房屋价 ...
- vue.js 源代码学习笔记 ----- 工具方法 lang
/* @flow */ // Object.freeze 使得这个对象不能增加属性, 修改属性, 这样就保证了这个对象在任何时候都是空的 export const emptyObject = Obje ...
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/19925819 作者:毛星云 ...
- 如何把rtl8188EUS驱动编译生成ko模块并且下载到rk平台Android4.2.2上使用
下了rtl8188EUS_linux_v4.3.24_16705.20160509.tar.gz,看了里面的数据手册,发现有些看不懂,上网搜了一下,发现大部分博客都在扯淡...后来还是我把Makefi ...
- Android 贝塞尔曲线解析
相信很多同学都知道"贝塞尔曲线"这个词,我们在很多地方都能经常看到.利用"贝塞尔曲线"可以做出很多好看的UI效果,本篇博客就让我们一起学习"贝塞尔曲线 ...
- android 几个开源项目
android的几个开源项目ormlite.volley.jsoup.vitamio ksoap2