Nginx upload上传模块(学习笔记十七)

本文详细介绍了Nginx Upload Module的工作原理、配置参数及其在实际中的应用。用户通过Nginx上传文件,文件会被保存到临时目录,并在后端PHP处理后移动到持久存储位置。配置中涉及的关键参数包括`upload_pass`、`upload_store`、`upload_store_access`等。同时,文章提供了一个完整的配置示例,并提到了测试和PHP处理上传文件的注意事项。
摘要由CSDN通过智能技术生成

上传模块配置样例:

# 上传大小限制(包括所有内容)

client_max_body_size 100m;


# 上传path配置

location /upload {

    # 转到后台处理URL

    upload_pass   /uploadHandle;


    # 临时保存路径

    # 可以使用散列

    upload_store /tmp/nginx_upload;


    # 上传文件的权限,rw表示读写 r只读

    upload_store_access user:rw;


    # 这里写入http报头,pass到后台页面后能获取这里set的报头字段

    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模块自动生成的一些信息,如文件大小与文件md5值

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


    # 每秒字节速度控制,0表示不受控制,默认0

    upload_limit_rate 0;


    # 如果pass页面是以下状态码,就删除此次上传的临时文件

    upload_cleanup 400 404 499 500-505;

}


一. nginx upload module原理

官方文档:http://www.grid.net.ru/nginx/upload.en.html

Nginx upload module通过nginx服务来接受用户上传的文件,自动解析请求体中存储的所有文件上传到upload_store指定的目录下。这些文件信息从原始请求体中分离并根据nginx.conf中的配置重新组装好上传参数,交由upload_pass指定的段处理,从而允许处理任意上传文件。每个上传文件中的file字段值被一系列的upload_set_form_field指令值替换。每个上传文件的内容可以从$upload_tmp_path变量读取,或者可以将文件转移到目的目录下。上传的文件移除可以通过upload_cleanup指令控制。如果请求的方法不是POST,模块将返回405错误(405 Not Allowed),该错误提示可以通过error_page指令处理。

具体的过程如下:

1. 用户访问能够选择上传文件的页面

2. 用户提交表单

3. 浏览器把文件和有关文件的信息作为请求的一部分发送给服务器

4. 服务器把文件保存到临时存储目录下upload_store

5. upload_pass指定的处理表单提交的php页面将文件从upload_store拷贝到持久存储位置

二.nginx upload module配置参数

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

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 “^submit$|^description$”;

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值