Nginx提供了NginxHttpUploadProgressModule模块,用来处理文件上传的进度


它不是nginx内置的模块,编译时需要加上一下选项


--add-module=../nginx_uploadprogress_module


以下是配置的部分:



折叠复制代码




  1. #开启上传进度,使用8M空间存储每个连接的进度信息  

  2. upload_progress proxied 8m;  

  3. #以/upload开头的为上传url  

  4. location ^~ /upload  

  5. {     

  6.     #设置body最大值为100m  

  7.     client_max_body_size    100m;  

  8.     proxy_pass http://127.0.0.1:8080;   

  9.     #此url需要跟踪进度信息,该信息在上传完成后会保留30秒  

  10.     track_uploads   proxied 30s;  

  11. }  

  12. location ^~ /att/progress {  

  13.     #此url来获取进度信息  

  14.     report_uploads  proxied;  

  15. }  






在使用该模块时,一点需要注意以下问题:



  1. track_uploads必须是location中最后一个指令,比如:它必须要放在proxy_pass的后边

  2. 如果通过X-Progress-ID的get参数来获取进度信息,则它必须是url中最后一个参数,如:/progress?user=test&X-Progress-ID=123456

  3. 必须设置client_max_body_size,它的值需要大于单次上传的最大值

  4. 当nginx用作前端的proxy时,它默认会把当前request body的值给缓存到client_body_buffer_size或临时文件中,当client完成上传后,nginx才会把文件给push到后端的server,所以,没有办法从后端的服务器上来获得正确的进度信息,必须在前端的nginx上来配置upload选项