Nginx Upload Module 上傳模塊
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
傳統站點在處理文件上傳請求時,普遍使用后端編程語言處理,如:Java、PHP、Python、Ruby等。今天給大家介紹Nginx的一個模塊,Upload Module上傳模塊,此模塊的原理是先把用戶上傳的文件保存到臨時文件,然后在交由后臺頁面處理,并且把文件的原名,上傳后的名稱,文件類型,文件大小set到頁面。
GitHub: https://github.com/vkholodkov/nginx-upload-module/tree/2.2
Site: http://wiki.nginx.org/HttpUploadModule
一、安裝模塊
從GitHub上下載源碼解壓,進入nginx源碼目錄,重新./configure并且添加如下參數:
// 添加此參數 --add-module=path/to/nginx_upload_module // 如果你的Upload Module路徑為:/home/nginx_upload_module --add-module=/home/nginx_upload_module
如果你想獲知此前nginx安裝參數可以這樣獲取:
[root@lee uploadtmp]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.5.10 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/home/nginx-upload-module-2.2
配置過程中,注意查看過程是否出錯
configuring additional modules adding module in /home/nginx-upload-module-2.2 + ngx_http_upload_module was configured
如果沒有什么錯直接就make && make install
完事
二、配置
直接來個樣例:
# 上傳大小限制(包括所有內容) 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的site
三、測試
我利用實例中的example.php測試處理結果:
連中文名都被識別set過來了
四、一些建議
效率對比,此模塊是由C語言寫的,效率自然不成問題,另外一個有點是不會過多占用后臺語言的線程。相比之下,Nginx利用負債均衡的能力處理文件上傳上,效率更高。
權限控制,這個確實蛋疼,因為業務代碼在nginx.conf
里寫太多反倒不好維護,但如果不考慮權限的情況下,并且file size 控制的小一點,結合upload_cleanup
不會有太大壓力。
上傳進程,可以結合Nginx的nginx_uploadprogress_module
使用
存儲位置,甚至可以把臨時文件保存到tmpfs中(不過這會有丟失的可能性)
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成