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

 




1


2


3




​.​​​​/configure​​ ​​–add-module=​​​​/usr/local/nginx_upload_module-​​​​*​


​make​


​make​​ ​​install​



重启nginx即可

以下是我的nginx配置文件

前端页面提交的时候直接提交到 http://test.local/upload 即可




1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31


32


33


34


35


36




​server​


​{​


​listen 80;​


​server_name ​​​​test​​​​.​​​​local​​​​;​


​index index.php index.shtml index.htm index.html;​


​root  ​​​​/data/app/test​​​​.​​​​local​​​​/wwwroot​​​​;​


​access_log  off;​


 


​location ​​​​/upload​​ ​​{​


​upload_pass     ​​​​/index​​​​.php?c=uploader&a=upload_server;​


​upload_cleanup 400 404 499 500-505;​


​upload_store    ​​​​/data/app/test​​​​.​​​​local​​​​/upload_tmp​​​​;​


​upload_store_access user:r;​


​upload_limit_rate 128k;​


​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_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 ​​​​"^.*$"​​​​;​


​}​


 


​location ~ .*\.php?$​


​{​


​include fastcgi_params;​


​}​


 


​location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {​


​expires      30d;​


​}​


 


​location ~ .*\.(js|css)?$ {​


​expires      1d;​


​}​


 


​}​



大概解释一下每个参数




1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22




​upload_pass 指明了需要后续处理的php地址​


 


​upload_cleanup 如果php出现400 404 499 500-505之类的错误,则删除上传的文件​


 


​upload_store 上传文件存放地址​


 


​upload_store_access 上传文件的访问权限,user:r是指用户可读​


 


​upload_limit_rate 上传限速,如果设置为0则表示不限制​


 


​upload_set_form_field 设定额外的表单字段。这里有几个可用的变量:​


​$upload_file_name 文件原始名字​


​$upload_field_name 表单的name值​


​$upload_content_type 文件的类型​


​$upload_tmp_path 文件上传后的地址​


 


​upload_aggregate_form_field 额外的变量,在上传成功后生成​


​$upload_file_md5 文件的MD5校验值​


​$upload_file_size 文件大小​


 


​upload_pass_form_field 从表单原样转到后端的参数,可以正则表达式表示​


​官方的例子是upload_pass_form_field ​​​​"^submit$|^description$"​​​​;意思是把submit,description这两个字段也原样通过upload_pass传递到后端php处理。如果希望把所有的表单字段都传给后端可以用upload_pass_form_field ​​​​"^.*$"​​​​;​