这两天刚好在做上传文件的功能,趁机系统地整理一下nginx的upload模块。

一、upload模块的工作原理

upload模块通过nginx server来接受用户上传的文件,解析请求体中的文件并将其存放在upload_store指定的路径下。之后,从请求体中解析出文件信息,并按照nginx.conf中的upload模块的配置对请求信息进行一些处理,然后传递给upload_pass指定的段处理。

处理过程如下:

1、用户提交表单;

2、浏览器将文件和文件信息作为请求的一部分发送给服务器;

3、服务器将该请求定位到upload模块;

4、将文件暂存在upload_store指定的路径下;

5、文件信息经过处理传送给upload_pass指定的段;

6、对文件进行处理,拷贝到永久存储位置;

安装编译方法(我没试过,因为环境是配置好的,记录下)

1.下载

wget http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz

2、2.编译(在NGINX编译目录执行以下命令, 其中 --add-module=你下载解压的上传插件目录)

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_s
sl_module --with-http_gzip_static_module --add-module=/data/downfile/nginx_upload_module-2.2.0

二.nginx upload module配置参数

upload_pass 指明后续处理的后端逻辑。文件中的字段将被分离和取代,包含必要的信息处理上传文件。

upload_resumable 是否启动可恢复上传。

upload_store 指定上传文件存放地址(目录)。目录可以散列,在这种情况下,在nginx启动前,所有的子目录必须存在。

upload_state_store 指定保存上传文件可恢复上传的文件状态信息目录。目录可以散列,在这种情况下,在nginx启动前,所有的子目录必须存在。

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

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

$upload_field_name — 原始文件中的字段的名称

upload_pass_form_field “^submitnginx slice模块在哪生成的range nginx module_nginx”;

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

upload_set_form_field 名称和值都可能包含以下特殊变量:

$upload_field_name 表单的name值

$upload_content_type 上传文件的类型

$upload_file_name 客户端上传的原始文件名称

$upload_tmp_path 文件上传后保存在服务端的位置

upload_aggregate_form_field 可以多使用的几个变量,文件接收完毕后生成的并传递到后端

$upload_file_md5 文件的MD5校验值

$upload_file_md5_uc 大写字母表示的MD5校验值

$upload_file_sha1 文件的SHA1校验值

$upload_file_sha1_uc 大写字母表示的SHA1校验值

$upload_file_crc32 16进制表示的文件CRC32值

$upload_file_size 文件大小

$upload_file_number 请求体中的文件序号

这些字段值是在文件成功上传后计算的。

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

upload_buffer_size 上传缓冲区大小

upload_max_part_header_len 指定头部分最大长度字节。

upload_max_file_size 指定上传文件最大大小,软限制。client_max_body_size硬限制。

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

upload_max_output_body_len 超过这个大小,将报403错(Request entity too large)。

upload_tame_arrays 指定文件字段名的方括号是否删除

upload_pass_args 是否转发参数。