Nginx的Upload上传模块

作者: aries 分类: PHP 发布时间: 2014-01-06 11:13 ė 2308次浏览 6 0评论

做过一个项目,会上传百兆的文件,直接用PHP上传处理会比较麻烦,经常超时,而且大量占用资源。于是搜索了下,决定用nginx的upload上传模块来处理。

你可以在这里:http://www.grid.net.ru/nginx/upload.en.html 获取源码。下载以后需要重新编译nginx

安装方法可以参考这里:http://iw3c.com/archive/nginx-upload-module/

或者

./configure –add-module=/usr/local/nginx_upload_module-*
make
make install
重启nginx即可

以下是我的nginx配置文件

前端页面提交的时候直接提交到 http://dev.local/upload 即可
server
{
        listen 80;
        server_name test.local;
        index index.php index.shtml index.htm index.html;
        root  /data/app/dev.local/wwwroot;
        access_log  off;
    location /upload {
            upload_pass     /upload;
            upload_cleanup 400 404 499 500-505;
            upload_store    /data/app/dev.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;
    }

}

参数注释:

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

参考:[http://blog.csdn.net/waden/article/details/7040123](http://blog.csdn.net/waden/article/details/7040123) 和 [http://blog.sina.com.cn/s/blog_704836f401014bpj.html](http://blog.sina.com.cn/s/blog_704836f401014bpj.html)
换一个
暂无评论
Ɣ回顶部