文档章节

Nginx初步-2: 添加nginx-upload-module模块

 如月王子
发布于 2014/08/22 14:34
字数 1005
阅读 458
收藏 1

为什么?

因为显示上传进度的需要。而PHP官方的进度支持不适用于Nginx+PHP via FastCGI。相关文章请参考使用Session来跟踪上传进度。该文最后的Warning表示Nginx会自己处理上传,而PHP就只能得到一个最终结果,不能跟踪过程。最后一个跟帖(来自s.zarges)也给出相同的警告。这样,就不得不找别的办法,比如APC之类。而我选择了nginx-upload-module。


关于nginx-upload-module

这个模块由vkholodkov于5年前开发,现在已经不更新N久了。其源代码位于:https://github.com/vkholodkov/nginx-upload-module/tree/2.2。这是文档。直接下载源代码

下载完成后,解压:

tar xvfz nginx_upload_module-2.0.11.tar.gz


需要打补丁

代码恒久远,八哥永流传。多少年过去了,许多代码变得面目全非,许多更失去了本来面目,只剩下那一砣砣的八哥,提醒我们曾经辉煌的过往。现在的Nginx相对5年前,已经修改了很多东西,比如ngx_http_read_request_body_t已经删除了to_write成员,而该成员被nginx-upload-module所需要。其结果就是nginx-upload-module无法编译。关于该问题的讨论请参考这个链接。我们要感谢这个哥们:davromaniak,他修改了nginx-upload-module,修正了错误,使之可以通过编译。这是他的关于该问题修正的博文。我们要做的就是下载他的修改,给nginx-upload-module打补丁。

下载的Patch文件名为 davromaniak.txt

打补丁使用以下命令:

cp darvromaniak.txt [nginx_upload_module所在目录]
patch ngx_http_upload_module.c davromaniak.txt


将模块编译进Nginx

先从这个链接下载Nginx源码。然后编译:

cd nginx-1.5.8

./configure --prefix=. --sbin-path=nginx --conf-path=config/nginx.conf --pid-path=logs/nginx.pid --error-log-path=logs/error.log --with-cc-opt="-D FD_SETSIZE=4096" --with-debug --add-module=../nginx_upload_module-2.0.11 --add-module=../nginx-upload-progress-module-0.9.1
make
make install


在短暂的等待后,编译和安装就完成了,可以重启Nginx。


遇到的问题:

我使用了比较旧的nginx-upload-module(2.0),如果你使用的是新的2.2,遇到什么问题,请自行解决。

  1. prefix的选项,如果我们指定–prefix=/cygdrive/d/nginx,那么最后脱离Cygwin环境运行,会发现root无法指向其它磁盘上的目录,所以这里使用了相对路径,而且指定了可执行文件nginx在根目录下,而不是默认的sbin/nginx。

  2. FD_SETSIZE=4096,网上都说了,是将select模式的最大worker_connections加大。如果不加此参数将可能出现以下的错误提示:[emerg] 2496#0: the maximum number of files supported by select() is 64的错误提示。这表示FD_SETSIZE的值比nginx配置文件中worker_connections指令所指定的值小,你可以把nginx.conf里的worker_connections选项改小一些,比如44,加了–with-cc-opt=”-DFD_SETSIZE=4096”后就不会碰到这问题 。

  3. 我参考的文章中 --conf-path 参数都是 conf/nginx.conf,这个是默认的。但是这样指定的话,在make install的时候会报:cp: "conf/koi-win" 与"./conf/koi-win" 为同一文件的错误。因为我们是在源码文件夹中编译的,里面有conf这个文件夹,而 make install 的时候又会将源码文件夹中的conf/nginx.conf拷贝到目标文件夹,但我们命令中 --prefix 指定的就是当前文件夹,因此会报错。解决办法就是编译的时候将配置文件指定到其他名称的文件夹中(如本例中的 config/)。

  4. 编译成功后,在Cygwin下运行正常,但如果要脱离Cygwin,需要从cygwin/bin下拷贝cygwin1.dll,cyggcc_s-1.dll,cygz.dll,cygcrypto-0.9.8.dll,cygcrypto-1.0.0.dll,cygpcre-0.dll,cygpcre-1.dll,cygcrypt-0.dll这几个dll到nginx目录下。

补充:

nginx-upload-module(2.2)如果遇到在函数‘ngx_http_upload_merge_ranges’中: 

/usr/local/app/nginx_upload_module-2.2.0/ngx_http_upload_module.c:1682:22: 错误:变量‘result’被设定但未被使用 [-Werror=unused-but-set-variable] 

就把Makefile文件里的 -Werror去掉


重启Nginx的脚本

@echo off 
echo Stoping nginx… 
taskkill /F /IM nginx.exe 
echo Validating nginx.conf… 
nginx.exe -t -c conf/nginx.conf 
echo Starting nginx… 
nginx.exe -c conf/nginx.conf 
tasklist | findstr nginx


参考:

http://www.jb51.net/softjc/37172.html

http://www.tech126.com/cygwin-nginx/

http://wiki.nginx.org/InstallOptions#Notes


本文转载自:http://blog.csdn.net/igame/article/details/17477351

粉丝 15
博文 177
码字总数 3194
作品 0
淮安
私信 提问
添加nginx-upload-module模块

为什么? 因为显示上传进度的需要。而PHP官方的进度支持不适用于Nginx+PHP via FastCGI。相关文章请参考使用Session来跟踪上传进度。该文最后的Warning表示Nginx会自己处理上传,而PHP就只能...

mickelfeng
2015/02/02
0
0
MogileFS-2.44 安装与配置

MogileFS-2.44 安装与配置 一、MogileFS 介绍< xmlnamespace prefix ="o" /> MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开......

youyu2299
2013/12/07
0
0
nginx 图片文件压缩配置方法

查看ngix编译参考,是否启用了gzip模块,运行命令: 代码如下 复制代码 /path/to/binary/nginx -V (我的nginx在PATH目录里,故命令中可以省略nginx所在的目录),写为nginx -t 即可,下文从略...

抢地主
2017/11/04
0
0
Nginx之反向代理与负载均衡实现动静分离实战

Nginx之反向代理与负载均衡实现动静分离实战 什么是反向代理与负载均衡 Nginx仅仅作为Nginx proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果。 负载均衡指的是对请...

于学康
2017/05/31
0
0
【Diary Report 2017-12-27】关于FastDFS蛋疼的集群和负载均衡(三)

diary_report.jpg Interesting things 由于FastDFS配置太复杂了,所以拆分到这一篇继续讲解。 What to do tomorrow tracker和storage集群搭建完毕,FastDFS集群还未搭建完毕。 我们先不急着去...

cmazxiaoma
2017/12/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

group by分组后获得每组中时间最大的那条记录

用途: GROUP BY 语句用于 对一个或多个列对结果集进行分组。 例子: 原表: 现在,我们希望根据USER_ID 字段进行分组,那么,可使用 GROUP BY 语句。 我们使用下列 SQL 语句: SELECT ID,US...

豆花饭烧土豆
43分钟前
0
0
android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
53分钟前
3
0
java 序列化和反序列化

1. 概述 序列恢复为Java对象的过程。 对象的序列化主要有两 首先我们介绍下序列化和反序列化的概念: 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。...

edison_kwok
今天
2
0
分布式数据一致性

狼王黄师傅
今天
2
0
经验

相信每位开发者在自己开发的过程中,都会反思一些问题,比如怎样提高编程能力、如何保持心态不砍产品经理、996 之后怎样恢复精力……最近开发者 Tomasz Łakomy 将他 7 年的开发生涯中学习到...

WinkJie
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部