在ubuntu安裝nginx還算是蠻容易的:sudo apt-get install nginx
一條命令就可以解決雷猪。
但是如果要使用上傳模塊就必須重新編譯秸侣,這也就意味著原來使用apt-get安裝的nginx需要卸載掉包括配置文件:
sudo apt-get autoremove --purge nginx
然后下載nginx上傳所需要的模塊:
下載源代碼
1.下載上傳模塊和上傳進(jìn)度模塊
cd
mkdir tmp && cd tmp
git clone -b 2.2 https://github.com/vkholodkov/nginx-upload-module.git
git clone https://github.com/masterzen/nginx-upload-progress-module.git
2.下載nginx的源碼:
注意:這里用最新的1.12.0會(huì)報(bào)錯(cuò)(md5錯(cuò)誤裆针,沒有解決)恬口,用1.10.x就可以
http://nginx.org/en/download.html
直接上上面那個(gè)網(wǎng)站下載后解壓比伏。
安裝依賴:
sudo apt-get install libpcre3 libpcre3-dev
可能還需要
sudo apt-get install openssl libssl-dev
開始編譯:
進(jìn)入下載解壓的nginx目錄
sudo ./configure --add-module=/home/xxx/tmp/nginx-upload-module --add-module=/home/xxx/tmp/nginx-upload-progress-module
這里添加了兩個(gè)模塊敞曹,請(qǐng)對(duì)應(yīng)自己下載的兩個(gè)模塊地址。
sudo make
make install
注意編譯最后要加上:
可進(jìn)行打包:(可忽略)
sudo apt-get install checkinstall #下載打包工具
sudo checkinstall -D -y -install=no -default make install
使用dpkg進(jìn)行安裝:
sudo dpkg -i nginx_1.4.6-1_amd64.deb
dpkg安裝時(shí)可能會(huì)遇到這個(gè)問題
dpkg: error processing archive nginx_1.4.6-1_amd64.deb (--install):
trying to overwrite '/etc/nginx/win-utf', which is also in package nginx-common 1.10.0-0ubuntu0.16.04.4
Errors were encountered while processing:
nginx_1.4.6-1_amd64.deb
這樣的話只要安裝時(shí)加一個(gè)參數(shù)即可综膀,這個(gè)做法會(huì)將之前的nginx覆蓋:
sudo dpkg -i --force-overwrite nginx_1.4.6-1_amd64.deb
修改nginx
在配置nginx之前:
需要將其他服務(wù)器/etc/init.d/nginx 這個(gè)文件拷貝過來澳迫,因?yàn)榫幾g安裝的nginx并沒有添加進(jìn)service 啟動(dòng)較為麻煩:
考過來之后需要改的地方有:
在PATH最后添加/usr/local/nginx/sbin:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:
DAEMON修改為:
DAEMON=/usr/local/nginx/sbin/nginx
NGINX_CONF_FILE修改
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
修改nginx的權(quán)限:
sudo chmod 755 /etc/init.d/nginx
現(xiàn)在就可以重新啟動(dòng)nginx了
sudo /etc/init.d/nginx -s reload
配置nginx文件:
可以參照這里https://hui.lu/upload-file-with-nginx-upload-file/
location /upload {
65 upload_pass @test; # 后端處理文件的地址,此處地址不應(yīng)和上面的/upload地址一樣
66 upload_resumable on;
67 upload_cleanup 400 413 404 499 500-505;
68 upload_store /tmp 1;
69 upload_store_access user:rw all:rw;
70 # upload_limit_rate 0;
71 upload_set_form_field "file_name" $upload_file_name;
72 upload_set_form_field "content_type" $upload_content_type;
73 upload_set_form_field "tmp_path" $upload_tmp_path;
74 upload_aggregate_form_field "md5" $upload_file_md5;
75 upload_aggregate_form_field "size" $upload_file_size;
76 upload_pass_form_field "^.*$";
77 # upload_pass_args on; #打開開關(guān)剧劝,意思就是把前端腳本請(qǐng)求的參數(shù)會(huì)傳給后端
78 # track_uploads proxied 30s; # 必須放最后一行
79 }
80 location @test {
81 proxy_pass http://localhost:8080;
82 }
使用upload module配置指令說明
upload_pass
文件上傳結(jié)束后代理到的地址橄登,同時(shí)將文件信息傳遞給此地址。
upload_resumble
是否開啟續(xù)傳讥此,默認(rèn)關(guān)閉
upload_store
上傳文件的存放位置拢锹,文件存放路徑被hash到子目錄中,注意nginx不會(huì)自動(dòng)創(chuàng)建子目錄萄喳,必須使用前創(chuàng)建卒稳,否則會(huì)報(bào)錯(cuò)
upload_state_store
斷點(diǎn)續(xù)傳狀態(tài)文件的存放位置,如果不配置他巨,會(huì)與文件hash存放到一個(gè)目錄下展哭,名稱為文件名.state,同上傳目錄一樣闻蛀,使用前必須創(chuàng)建子目錄
upload_store_access
nginx user對(duì)上傳文件的讀寫權(quán)限,默認(rèn)同時(shí)擁有讀寫權(quán)限
upload_set_form_field
聲名傳遞到后臺(tái)的參數(shù)名和值您市,一個(gè)文件可使用的屬性如下觉痛。
$upload_field_name:上傳表單中文件所屬的input輸入框的name屬性
$upload_content_type:文件類型
$upload_file_name:文件名
$upload_tmp_path:文件的存放路徑
upload_aggregate_form_field
與upload_set_form_field指令類似,將文件上傳結(jié)束后的屬性傳遞到后臺(tái)茵休,可使用的屬性如下薪棒。
$upload_file_md5:文件的md5sum值
$upload_file_md5_uc:大寫形式的文件md5sum值
$upload_file_sha1:文件的sha1 sum值
$upload_file_sha1_uc:大寫形式的文件sha1 sum值
$upload_file_crc32:16進(jìn)制的CRC32文件校驗(yàn)碼
$upload_file_size:文件大小,單位為bytes
$upload_file_number:文件體在請(qǐng)求體中的序號(hào)
upload_pass_form_field
聲名被傳遞到后臺(tái)的原表單字段榕莺,使用正則表達(dá)式
upload_cleanup
聲名后臺(tái)返回什么狀態(tài)碼時(shí)俐芯,nginx需要?jiǎng)h除上傳文件,狀態(tài)碼必須在400~500之間
upload_max_part_header_len
聲名最大的http頭長度钉鸯,即buffer size
upload_max_file_size
聲名允許上傳的文件大小限制吧史,官方文檔解釋為“軟”限制,即超過此大小的文件仍將被接收唠雕,而client_max_body_size為“硬”限制贸营。值為零表示無大小限制。
upload_limit_rate
聲名最大的上傳速度岩睁,0表示無限制
upload_max_output_body_len
聲名最大的輸出body大小钞脂,防止非file類型的輸入堆積到memory,0表示無限制
upload_tame_array
參數(shù)名中的中括號(hào)是否被丟掉
配置實(shí)例
處理上傳的路徑為:/nginx-upload捕儒,此地址為上傳表單的提交地址
文件上傳完成后冰啃,nginx會(huì)將請(qǐng)求代理到后端,本例中為自定義的location upload,代理到的地址還是/nginx-upload阎毅,當(dāng)然可以使用rewrite指令代理到例外一個(gè)地址焚刚。
后臺(tái)會(huì)接收到的參數(shù)名和值自定義,在本例子中分別為name净薛,content_type, path, md5, size, submit 和description
上傳文件時(shí)汪榔,action="/upload?X-Progress-ID=FmN6gTEshAHCcUvR" 其中X-Progress-ID需要是唯一的id,用來上傳時(shí)獲取進(jìn)度的id
獲取上傳進(jìn)度需向/progress發(fā)送一個(gè)get請(qǐng)求 /process?X-Progress-ID=FmN6gTEshAHCcUvR即可獲得上傳的進(jìn)度