美文网首页
加上上传模块的nginx编译和配置

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

作者: marine0131 | 来源:发表于2017-09-27 13:24 被阅读0次

在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即可获得上传的进度

相关文章

网友评论

      本文标题:加上上传模块的nginx编译和配置

      本文链接:https://www.haomeiwen.com/subject/yntuextx.html