传统站点在处理文件上传请求时,普遍使用后端编程语言处理,如: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并且添加如下参数:

  1. // 添加此参数
  2. --add-module=path/to/nginx_upload_module
  3.  
  4. // 如果你的Upload Module路径为:/home/nginx_upload_module
  5. --add-module=/home/nginx_upload_module

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

  1. [root@lee uploadtmp]# /usr/local/nginx/sbin/nginx -V
  2. nginx version: nginx/1.5.10
  3. built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)
  4. TLS SNI support enabled
  5. 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

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

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

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

二、配置

直接来个样例:

  1. # 上传大小限制(包括所有内容)
  2. client_max_body_size 100m;
  3.  
  4. # 上传path配置
  5. location /upload {
  6. # 转到后台处理URL
  7. upload_pass /uploadHandle;
  8.  
  9. # 临时保存路径
  10. # 可以使用散列
  11. upload_store /tmp/nginx_upload;
  12.  
  13. # 上传文件的权限,rw表示读写 r只读
  14. upload_store_access user:rw;
  15.  
  16. # 这里写入http报头,pass到后台页面后能获取这里set的报头字段
  17. upload_set_form_field "${upload_field_name}_name" $upload_file_name;
  18. upload_set_form_field "${upload_field_name}_content_type" $upload_content_type;
  19. upload_set_form_field "${upload_field_name}_path" $upload_tmp_path;
  20.  
  21. # Upload模块自动生成的一些信息,如文件大小与文件md5值
  22. upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5;
  23. upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;
  24.  
  25. # 允许的字段,允许全部可以 "^.*$"
  26. upload_pass_form_field "^submit$|^description$";
  27.  
  28. # 每秒字节速度控制,0表示不受控制,默认0
  29. upload_limit_rate 0;
  30.  
  31. # 如果pass页面是以下状态码,就删除此次上传的临时文件
  32. upload_cleanup 400 404 499 500-505;
  33. }

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

三、测试

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

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

四、一些建议

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

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

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

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

Nginx Upload Module 上传模块的更多相关文章

  1. nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。

    ownload:http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gzconfigure and make : . ...

  2. nginx上传模块—nginx upload module-

    一. nginx upload module原理 官方文档: http://www.grid.net.ru/nginx/upload.en.html Nginx upload module通过ngin ...

  3. 转:使用 Nginx Upload Module 实现上传文件功能

    普通网站在实现文件上传功能的时候,一般是使用Python,Java等后端程序实现,比较麻烦.Nginx有一个Upload模块,可以非常简单的实现文件上传功能.此模块的原理是先把用户上传的文件保存到临时 ...

  4. Nginx的Upload上传模块

    前段时间做一个项目,需要上传文件,差不多需要20M左右,普通用php处理会比较麻烦,经常超时,而且大量占用资源.于是搜索了下,决定用nginx的upload上传模块来处理. 你可以在这里:http:/ ...

  5. 解决nginx上传模块nginx_upload_module传递GET参数

    解决nginx上传模块nginx_upload_module传递GET参数的方法总结 最近用户反映我们的系统只能上传50M大小的文件, 希望能够支持上传更大的文件. 很显然PHP无法轻易实现大文件上传 ...

  6. nginx upload module的使用

    现在的网站,总会有一点与用户交互的功能,例如允许用户上传头像,上传照片,上传附件这类的.PHP写的程序,对于上传文件效率不是很高.幸好,nginx有一个名为upload的module可以解决这个问题. ...

  7. 基于SpringBoot从零构建博客网站 - 设计可扩展上传模块和开发修改头像密码功能

    上传模块在web开发中是很常见的功能也是很重要的功能,在web应用中需要上传的可以是图片.pdf.压缩包等其它类型的文件,同时对于图片可能需要回显,对于其它文件要能够支持下载等.在守望博客系统中对于上 ...

  8. druapl-note1 本地开发上传模块不提示Ftp的警告

    刚安装完drupal之后,通过drupalxray 看到其它drupal网站安装的一些模块,下载好模块并安装时,提示需要输入Ftp信息. 但是本地开发不输入Ftp信息的(也不清楚自己的系统是否开启Ft ...

  9. nginx实现文件上传和下载

    nginx实现文件上传和下载 发布时间:2020-06-05 16:45:27 来源:亿速云 阅读:156 作者:Leah 栏目:系统运维 这篇文章给大家分享的是nginx实现文件上传和下载的方法.小 ...

随机推荐

  1. python笔记之subprocess模块

    python笔记之subprocess模块 [TOC] 从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spaw ...

  2. fence repair(队列水过)

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 32916   Accepted: 10638 点我 ...

  3. Js函数加括号、不加括号(转)

    函数只要是要调用它进行执行的,都必须加括号.此时,函数()实际上等于函数的返回值.当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码. 不加括 ...

  4. Eclipse Clojure 开发插件

    参考:http://doc.ccw-ide.org/documentation.html#install-as-plugin 安装Eclipse Clojure插件 这里安装的插件是Countercl ...

  5. 关于onclick中的event对象和element对象

    event.srcElement:引发事件的目标对象,常用于onclick事件. event.fromElement:引发事件的对象源,常用于onmouseout和onmouseover事件. eve ...

  6. [置顶] ruby复制对象的方法(dup 和 clone)

    Ruby内置的方法Object#clone和Object#dup可以用来copy一个对象,两者区别是dup只复制对象的内容,而clone还复制与对象相关联的内容,如singleton method [ ...

  7. HTML5 Canvas Cheat Sheet

    HTML5 Canvas Cheat Sheet HTML5 Canvas Cheat Sheet v1.x

  8. 关闭ubuntu apport

    apport就是ubuntu上的"crash report"服务,就是当有程序崩溃时弹出的那个发送error report的程序: 个人觉得此功能无用,本着给我的老本子节省资源的思 ...

  9. MyEclipse 注册码

    MyEclipse 注册码和大家共享一下! 一:MyEclipse_6.0.1GA_E3.3.1_FullStackInstaller注册码 Subscriber:javp Subscription ...

  10. 用了 CSDN 的 markdown 编辑器吐槽下~~

    吐槽一下.. . 第一次用 CSDN 的这个 markdown 编辑器,首先感官上看起来还是非常大气相比曾经那个 HTML 编辑器实在时上了N个档次,但实际使用的体验实在是比較糟糕的.希望能改进下哦: ...