Nginx Upload Module 上传模块

简介: 传统站点在处理文件上传请求时,普遍使用后端编程语言处理,如:Java、PHP、Python、Ruby等。今天给大家介绍Nginx的一个模块,Upload Module上传模块,此模块的原理是先把用户上传的文件保存到临时文件,然后在交由后台页面处理,并且把文件的原名,上传后的名称,文件类型,文件大小set到页面。

传统站点在处理文件上传请求时,普遍使用后端编程语言处理,如:Java、PHP、Python、Ruby等。今天给大家介绍Nginx的一个模块,Upload Module上传模块,此模块的原理是先把用户上传的文件保存到临时文件,然后在交由后台页面处理,并且把文件的原名,上传后的名称,文件类型,文件大小set到页面

GitHub: https://github.com/vkholodkov/nginx-upload-module/tree/2.2

Site: http://wiki.nginx.org/HttpUploadModule

一、安装模块

从GitHub上下载源码解压,进入nginx源码目录,重新./configure并且添加如下参数:

// 添加此参数
--add-module=path/to/nginx_upload_module

// 如果你的Upload Module路径为:/home/nginx_upload_module
--add-module=/home/nginx_upload_module

如果你想获知此前nginx安装参数可以这样获取:

[root@lee uploadtmp]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.5.10
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) 
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/home/nginx-upload-module-2.2

配置过程中,注意查看过程是否出错

configuring additional modules
adding module in /home/nginx-upload-module-2.2
 + ngx_http_upload_module was configured

如果没有什么错直接就make && make install完事

二、配置

直接来个样例:

# 上传大小限制(包括所有内容)
client_max_body_size 100m;

# 上传path配置
location /upload {
    # 转到后台处理URL
    upload_pass   /uploadHandle;

    # 临时保存路径
    # 可以使用散列
    upload_store /tmp/nginx_upload;
    
    # 上传文件的权限,rw表示读写 r只读
    upload_store_access user:rw;

    # 这里写入http报头,pass到后台页面后能获取这里set的报头字段
    upload_set_form_field "${upload_field_name}_name" $upload_file_name;
    upload_set_form_field "${upload_field_name}_content_type" $upload_content_type;
    upload_set_form_field "${upload_field_name}_path" $upload_tmp_path;

    # Upload模块自动生成的一些信息,如文件大小与文件md5值
    upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5;
    upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;

    # 允许的字段,允许全部可以 "^.*$"
    upload_pass_form_field "^submit$|^description$";

    # 每秒字节速度控制,0表示不受控制,默认0
    upload_limit_rate 0;

    # 如果pass页面是以下状态码,就删除此次上传的临时文件
    upload_cleanup 400 404 499 500-505;
}

以上配置中,仅是一些常用配置,更全的配置请看Nginx Upload Module的site

三、测试

我利用实例中的example.php测试处理结果:

连中文名都被识别set过来了

四、一些建议

效率对比,此模块是由C语言写的,效率自然不成问题,另外一个有点是不会过多占用后台语言的线程。相比之下,Nginx利用负债均衡的能力处理文件上传上,效率更高。

权限控制,这个确实蛋疼,因为业务代码在nginx.conf里写太多反倒不好维护,但如果不考虑权限的情况下,并且file size 控制的小一点,结合upload_cleanup不会有太大压力。

上传进程,可以结合Nginx的nginx_uploadprogress_module使用

存储位置,甚至可以把临时文件保存到tmpfs中(不过这会有丢失的可能性)

目录
相关文章
|
4月前
|
负载均衡 应用服务中间件 API
Nginx:location配置模块的用法(一)
Nginx:location配置模块的用法(一)
556 2
|
2月前
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
44 0
|
4月前
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
221 1
|
4月前
|
负载均衡 应用服务中间件 Linux
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
|
4月前
|
缓存 前端开发 应用服务中间件
Nginx:location配置模块的用法(二)
Nginx:location配置模块的用法(二)
243 2
|
5月前
|
应用服务中间件 Linux nginx
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
《FFmpeg开发实战》书中介绍了如何使用FFmpeg向网络推流,简单流媒体服务器MediaMTX不适用于复杂业务。nginx-rtmp是Nginx的RTMP模块,提供基本流媒体服务。要在Linux上集成rtmp,需从官方下载nginx和nginx-rtmp-module源码,解压后在nginx目录配置并添加rtmp模块,编译安装。配置nginx.conf启用RTMP服务,监听1935端口。使用ffmpeg推流测试,如能通过VLC播放,表明nginx-rtmp运行正常。更多详情见书本。
141 0
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
|
4月前
|
Ubuntu 前端开发 JavaScript
如何在 Ubuntu 14.04 上为 Nginx 添加 gzip 模块
如何在 Ubuntu 14.04 上为 Nginx 添加 gzip 模块
36 0
|
应用服务中间件 Linux 网络安全
虚拟机Centos下载安装Nginx并安装ssl模块——小白教程
虚拟机Centos下载安装Nginx并安装ssl模块——小白教程
416 0
|
应用服务中间件 nginx
安装nginx-rtmp-module模块与配置
安装nginx-rtmp-module模块与配置
|
7月前
|
Ubuntu 应用服务中间件 nginx
ubuntu编译安装nginx及安装nginx_upstream_check_module模块
以上是编译安装Nginx和安装 `nginx_upstream_check_module`模块的基本步骤。根据你的需求和环境,你可能需要进一步配置Nginx以满足特定的要求。
313 3