Nginx的上传模块NginxHttpUploadProgressModule
Nginx提供了NginxHttpUploadProgressModule模块,用来处理文件上传的进度
它不是nginx内置的模块,编译时需要加上一下选项
以下是配置的部分:
折叠复制代码
- #开启上传进度,使用8M空间存储每个连接的进度信息
- upload_progress proxied 8m;
- #以/upload开头的为上传url
- location ^~ /upload
- {
- #设置body最大值为100m
- client_max_body_size 100m;
- proxy_pass http://127.0.0.1:8080;
- #此url需要跟踪进度信息,该信息在上传完成后会保留30秒
- track_uploads proxied 30s;
- }
- location ^~ /att/progress {
- #此url来获取进度信息
- report_uploads proxied;
- }
在使用该模块时,一点需要注意以下问题:
- track_uploads必须是location中最后一个指令,比如:它必须要放在proxy_pass的后边
- 如果通过X-Progress-ID的get参数来获取进度信息,则它必须是url中最后一个参数,如:/progress?user=test&X-Progress-ID=123456
- 必须设置client_max_body_size,它的值需要大于单次上传的最大值
- 当nginx用作前端的proxy时,它默认会把当前request body的值给缓存到client_body_buffer_size或临时文件中,当client完成上传后,nginx才会把文件给push到后端的server,所以,没有办法从后端的服务器上来获得正确的进度信息,必须在前端的nginx上来配置upload选项