设为首页 收藏本站
查看: 1062|回复: 0

[经验分享] Nginx upload module (v 2.2.0)

[复制链接]

尚未签到

发表于 2016-12-26 09:14:00 | 显示全部楼层 |阅读模式
zhuan : http://www.grid.net.ru/nginx/upload.en.html


Nginx upload module (v 2.2.0)


rus eng

A module for nginx web server for handling file uploads using multipart/form-data encoding (RFC 1867) and resumable uploads according to this protocol.

Description

The module parses request body storing all files being uploaded to a directory specified by upload_store directive. The files are then being stripped from body and altered request is then passed to a location specified by upload_pass directive, thus allowing arbitrary handling of uploaded files. Each of file fields are being replaced by a set of fields specified by upload_set_form_field directive. The content of each uploaded file then could be read from a file specified by $upload_tmp_path variable or the file could be simply moved to ultimate destination. Removal of output files is controlled by directive upload_cleanup. If a request has a method other than POST, the module returns error 405 (Method not allowed). Requests with such methods could be processed in alternative location via error_pagedirective.


Configuration directives


syntax: upload_pass <location>
default: none
severity: mandatory
context: server, location

Specifies location to pass request body to. File fields will be stripped and replaced by fields, containig necessary information to handle uploaded files.


syntax: upload_resumable <on/off>
defaultoff
severity: mandatory
context: main, server, location

Enables resumable uploads.


syntax: upload_store <directory> [<level 1> [<level 2> ] ... ]
default: none
severity: mandatory
context: server, location

Specifies a directory to which output files will be saved to. The directory could be hashed. In this case all subdirectories should exist before starting nginx.


syntax: upload_state_store <directory> [<level 1> [<level 2> ] ... ]
default: none
severity: optional
context: server, location

Specifies a directory that will contain state files for resumable uploads. The directory could be hashed. In this case all subdirectories should exist before starting nginx.


syntax: upload_store_access <mode>
default: user:rw
severity: optional
context: server, location

Specifies access mode which will be used to create output files.


syntax: upload_set_form_field <name> <value>
default: none
severity: optional
context: server, location

Specifies a form field(s) to generate for each uploaded file in request body passed to backend. Both name and value could contain following special variables:


  • $upload_field_name -- the name of original file field
  • $upload_content_type -- the content type of file uploaded
  • $upload_file_name -- the original name of the file being uploaded with leading path elements in DOS and UNIX notation stripped. I.e. "D:\Documents And Settings\My Dcouments\My Pictures\Picture.jpg" will be converted to "Picture.jpg" and "/etc/passwd" will be converted to "passwd".
  • $upload_tmp_path -- the path where the content of original file is being stored to. The output file name consists 10 digits and generated with the same algorithm as in proxy_temp_path directive.

These variables are valid only during processing of one part of original request body.
 
example: 

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";


syntax: upload_aggregate_form_field <name> <value>
default: none
severity: optional
context: server, location

Specifies a form field(s) containing aggregate attributes to generate for each uploaded file in request body passed to backend. Both name and value could contain standard nginx variables, variables from upload_set_form_field directive and following additional special variables:


  • $upload_file_md5 -- MD5 checksum of the file
  • $upload_file_md5_uc -- MD5 checksum of the file in uppercase letters
  • $upload_file_sha1 -- SHA1 checksum of the file
  • $upload_file_sha1_uc -- SHA1 checksum of the file in uppercase letters
  • $upload_file_crc32 -- hexdecimal value of CRC32 of the file
  • $upload_file_size -- size of the file in bytes
  • $upload_file_number -- ordinal number of file in request body

The value of a field specified by this directive is evaluated after successful upload of the file, thus these variables are valid only at the end of processing of one part of original request body.
 
WARNING: variables $upload_file_md5, $upload_file_md5_uc, $upload_file_sha1 and $upload_file_sha1_uc utilize additional resourses to calculate MD5 and SHA1 checksums.
example: 

upload_aggregate_form_field $upload_field_name.md5 "$upload_file_md5";
upload_aggregate_form_field $upload_field_name.size "$upload_file_size";


syntax: upload_pass_form_field <regex>
default: none
severity: optional
context: server, location

Specifies a regex pattern for names of fields which will be passed to backend from original request body. This directive could be specified multiple times per location. Field will be passed to backend as soon as first pattern matches. For PCRE-unaware enviroments this directive specifies exact name of a field to pass to backend. If directive is omitted, no fields will be passed to backend from client.
example: 

upload_pass_form_field "^submit$|^description$";
For PCRE-unaware environments:

upload_pass_form_field "submit";
upload_pass_form_field "description";


syntax: upload_cleanup <HTTP status/range> [<HTTP status/range>...]
default: none
severity: optional
context: server, location

Specifies HTTP statuses after generation of which all file successfuly uploaded in current request will be removed. Used for cleanup after backend or server failure. Backend may also explicitly signal errornous status if it doesn't need uploaded files for some reason. HTTP status must be a numerical value in range 400-599, no leading zeroes are allowed. Ranges of statuses could be specified with a dash.
example: 

upload_cleanup 400 404 499 500-505;

syntax: upload_buffer_size <size>
default: size of memory page in bytes
severity: optional
context: server, location

Size in bytes of write buffer which will be used to accumulate file data and write it to disk. This directive is intended to be used to compromise memory usage vs. syscall rate.


syntax: upload_max_part_header_len <size>
default: 512
severity: optional
context: server, location

Specifies maximal length of part header in bytes. Determines the size of the buffer which will be used to accumulate part headers.


syntax: upload_max_file_size <size>
default: off
severity: optional
context: main, server, location

Specifies maximal size of the file. Files longer than the value of this directive will be omitted. This directive specifies "soft" limit, in the sense, that after encountering file longer than specified limit, nginx will continue to process request body, trying to receive remaining files. For "hard" limit client_max_body_sizedirective must be used. The value of zero for this directive specifies that no restrictions on file size should be applied.


syntax: upload_limit_rate <rate>
default: 0
severity: optional
context: main, server, location

Specifies upload rate limit in bytes per second. Zero means rate is unlimited.


syntax: upload_max_output_body_len <size>
default: 100k
severity: optional
context: main, server, location

Specifies maximal length of the output body. This prevents piling up of non-file form fields in memory. Whenever output body overcomes specified limit error 413 (Request entity too large) will be generated. The value of zero for this directive specifies that no restrictions on output body length should be applied.


syntax: upload_tame_arrays <on/off>
default: off
severity: optional
context: main, server, location

Specifies whether square brackets in file field names must be dropped (required for PHP arrays).


syntax: upload_pass_args<on/off>
default: off
severity: optional
context: main, server, location

Enables forwarding of query arguments to location, specified by upload_pass. Ineffective with named locations. Example:

<form action="/upload?id=5">
...
location /upload {
upload_pass /internal_upload;
upload_pass_args on;
}
...
location /internal_upload {
...
proxy_pass http://backend;
}

In this example backend gets request URI "/upload?id=5". In case of upload_pass_args off backend gets "/upload".


Example configuration

server {
client_max_body_size 100m;
listen       80;
# Upload form should be submitted to this location
location /upload {
# Pass altered request body to this location
upload_pass   @test;
# Store files to this directory
# The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist
upload_store /tmp 1;
# Allow uploaded files to be read only by user
upload_store_access user:r;
# Set specified fields in request body
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";
# Inform backend about hash and size of a file
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$";
upload_cleanup 400 404 499 500-505;
}
# Pass altered request body to a backend
location @test {
proxy_pass   http://localhost:8080;
}
}

Example form

<html>
<head>
<title>Test upload</title>
</head>
<body>
<h2>Select files to upload</h2>
<form name="upload" method="POST" enctype="multipart/form-data" action="/upload">
<input type="file" name="file1"><br>
<input type="file" name="file2"><br>
<input type="file" name="file3"><br>
<input type="file" name="file4"><br>
<input type="file" name="file5"><br>
<input type="file" name="file6"><br>
<input type="submit" name="submit" value="Upload">
<input type="hidden" name="test" value="value">
</form>
</body>
</html>



Download


Latest version 2.2.0: tar.gz zip 
Version 2.0.12: tar.gz zip 
Version 2.0.11: tar.gz zip 
Version 2.0.10: tar.gz zip 
Version 2.0.9: tar.gz zip 
Version 2.0.8: tar.gz zip MD5 SHA1
Version 2.0.7: tar.gz zip MD5 SHA1
Version 2.0.6: tar.gz zip MD5 SHA1
Version 2.0.5: tar.gz zip MD5 SHA1
Version 2.0.4: tar.gz zip MD5 SHA1
Version 2.0.3: tar.gz zip MD5 SHA1
Version 2.0.2: tar.gz zip MD5 SHA1
or go to download area



Browse repository


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


Browse documentation for earlier versions


Version 2.0.12
Version 2.0.11
Version 2.0.10
Version 2.0.9
Version 2.0.8
Version 2.0.7
Version 2.0.6
Version 2.0.5
Version 2.0.4
Version 2.0.3
Version 2.0.2



How to use


Download sources from one of the links above. Unpack the archive:


tar xvzf nginx_upload_module-2.2.0.tar.gz

Configure nginx with additional module:
For nginx versions other than 0.7.44-51:

cd <path to nginx sources>
./configure --add-module=<path to upload module sources>
make
make install
For nginx versions 0.7.44-51:

cd <path to nginx sources>
CFLAGS="-Dnginx_version=7052" ./configure --add-module=<path to upload module sources>
make
make install


Nginx


nginx -- is a web-server, developed by Igor Sysoev.

Licence

The above-described module is an addition to nginx web-server, nevertheless they are independent products. The licence of above-described module is BSD You should have received a copy of license along with the source code. By using the materials from this site you automatically agree to the terms and conditions of this license. If you don't agree to the terms and conditions of this license, you must immediately remove from your computer all materials downloaded from this site.

Contact author

Valery Kholodkov valery+nginx@grid.net.ru
Please use address extension while composing an Email to me.



Copyright (C) 2006, 2008-2010 Valery Kholodkov
Module copyright notices see in module sources.

 
 
 
国内同类文章可见:
  http://wenku.baidu.com/view/3e1eebf44693daef5ef73dbe.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-319445-1-1.html 上篇帖子: [转] 企业级web负载均衡nginx+keepalived完美架构 下篇帖子: Nginx详细配置的备注说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表