加上上传模块的nginx编译和配置

在ubuntu安装nginx还算是蛮容易的:sudo apt-get install nginx一条命令就可以解决。
但是如果要使用上传模块就必须重新编译,这也就意味着原来使用apt-get安装的nginx需要卸载掉包括配置文件:
sudo apt-get autoremove --purge nginx
然后下载nginx上传所需要的模块:

下载源代码

1.下载上传模块和上传进度模块

cd
mkdir tmp && cd tmp
git clone -b 2.2 https://github.com/vkholodkov/nginx-upload-module.git
git clone https://github.com/masterzen/nginx-upload-progress-module.git

2.下载nginx的源码:
注意:这里用最新的1.12.0会报错(md5错误,没有解决),用1.10.x就可以

http://nginx.org/en/download.html

直接上上面那个网站下载后解压。

安装依赖:

sudo apt-get install libpcre3 libpcre3-dev 

可能还需要

sudo apt-get install openssl libssl-dev

开始编译:

进入下载解压的nginx目录

sudo ./configure  --add-module=/home/xxx/tmp/nginx-upload-module --add-module=/home/xxx/tmp/nginx-upload-progress-module

这里添加了两个模块,请对应自己下载的两个模块地址。

sudo make 
make install

注意编译最后要加上:

可进行打包:(可忽略)

sudo apt-get install checkinstall #下载打包工具
sudo checkinstall -D -y -install=no -default make install

使用dpkg进行安装:

sudo dpkg -i nginx_1.4.6-1_amd64.deb

dpkg安装时可能会遇到这个问题

dpkg: error processing archive nginx_1.4.6-1_amd64.deb (--install):
 trying to overwrite '/etc/nginx/win-utf', which is also in package nginx-common 1.10.0-0ubuntu0.16.04.4
Errors were encountered while processing:
 nginx_1.4.6-1_amd64.deb

这样的话只要安装时加一个参数即可,这个做法会将之前的nginx覆盖:

sudo dpkg -i --force-overwrite nginx_1.4.6-1_amd64.deb

修改nginx

在配置nginx之前:
需要将其他服务器/etc/init.d/nginx 这个文件拷贝过来,因为编译安装的nginx并没有添加进service 启动较为麻烦:
考过来之后需要改的地方有:

在PATH最后添加/usr/local/nginx/sbin:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:
DAEMON修改为:
DAEMON=/usr/local/nginx/sbin/nginx
NGINX_CONF_FILE修改
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

修改nginx的权限:

sudo chmod 755 /etc/init.d/nginx

现在就可以重新启动nginx了

sudo /etc/init.d/nginx -s reload

配置nginx文件:

可以参照这里https://hui.lu/upload-file-with-nginx-upload-file/

 location /upload {
 65             upload_pass @test; # 后端处理文件的地址,此处地址不应和上面的/upload地址一样
 66             upload_resumable on;
 67             upload_cleanup 400 413 404 499 500-505;
 68             upload_store /tmp 1;
 69             upload_store_access user:rw all:rw;
 70         #     upload_limit_rate 0;
 71             upload_set_form_field "file_name" $upload_file_name;
 72             upload_set_form_field "content_type" $upload_content_type;
 73             upload_set_form_field "tmp_path" $upload_tmp_path;
 74             upload_aggregate_form_field "md5" $upload_file_md5;
 75             upload_aggregate_form_field "size" $upload_file_size;
 76             upload_pass_form_field "^.*$";
 77         #     upload_pass_args on; #打开开关,意思就是把前端脚本请求的参数会传给后端
 78         #     track_uploads proxied 30s; # 必须放最后一行
 79         }
 80         location @test {                                                                                   
 81             proxy_pass http://localhost:8080;
 82         }

使用upload module配置指令说明
upload_pass

文件上传结束后代理到的地址,同时将文件信息传递给此地址。

upload_resumble

是否开启续传,默认关闭

upload_store

上传文件的存放位置,文件存放路径被hash到子目录中,注意nginx不会自动创建子目录,必须使用前创建,否则会报错

upload_state_store

断点续传状态文件的存放位置,如果不配置,会与文件hash存放到一个目录下,名称为文件名.state,同上传目录一样,使用前必须创建子目录

upload_store_access

nginx user对上传文件的读写权限,默认同时拥有读写权限

upload_set_form_field

声名传递到后台的参数名和值,一个文件可使用的属性如下。

$upload_field_name:上传表单中文件所属的input输入框的name属性

$upload_content_type:文件类型

$upload_file_name:文件名

$upload_tmp_path:文件的存放路径

upload_aggregate_form_field

与upload_set_form_field指令类似,将文件上传结束后的属性传递到后台,可使用的属性如下。

$upload_file_md5:文件的md5sum值

$upload_file_md5_uc:大写形式的文件md5sum值

$upload_file_sha1:文件的sha1 sum值

$upload_file_sha1_uc:大写形式的文件sha1 sum值

$upload_file_crc32:16进制的CRC32文件校验码

$upload_file_size:文件大小,单位为bytes

$upload_file_number:文件体在请求体中的序号

upload_pass_form_field

声名被传递到后台的原表单字段,使用正则表达式

upload_cleanup

声名后台返回什么状态码时,nginx需要删除上传文件,状态码必须在400~500之间

upload_max_part_header_len

声名最大的http头长度,即buffer size

upload_max_file_size

声名允许上传的文件大小限制,官方文档解释为“软”限制,即超过此大小的文件仍将被接收,而client_max_body_size为“硬”限制。值为零表示无大小限制。

upload_limit_rate

声名最大的上传速度,0表示无限制

upload_max_output_body_len

声名最大的输出body大小,防止非file类型的输入堆积到memory,0表示无限制

upload_tame_array

参数名中的中括号是否被丢掉

配置实例

处理上传的路径为:/nginx-upload,此地址为上传表单的提交地址

文件上传完成后,nginx会将请求代理到后端,本例中为自定义的location upload,代理到的地址还是/nginx-upload,当然可以使用rewrite指令代理到例外一个地址。

后台会接收到的参数名和值自定义,在本例子中分别为name,content_type, path, md5, size, submit 和description

上传文件时,action="/upload?X-Progress-ID=FmN6gTEshAHCcUvR" 其中X-Progress-ID需要是唯一的id,用来上传时获取进度的id
获取上传进度需向/progress发送一个get请求 /process?X-Progress-ID=FmN6gTEshAHCcUvR即可获得上传的进度

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容