加上上傳模塊的nginx編譯和配置

在ubuntu安裝nginx還算是蠻容易的:sudo apt-get install nginx一條命令就可以解決。
但是如果要使用上傳模塊就必須重新編譯,這也就意味著原來(lái)使用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ò)誤,沒(méi)有解決),用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è)問(wèn)題

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è)文件拷貝過(guò)來(lái),因?yàn)榫幾g安裝的nginx并沒(méi)有添加進(jìn)service 啟動(dòng)較為麻煩:
考過(guò)來(lái)之后需要改的地方有:

在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配置指令說(shuō)明
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頭長(zhǎng)度,即buffer size

upload_max_file_size

聲名允許上傳的文件大小限制,官方文檔解釋為“軟”限制,即超過(guò)此大小的文件仍將被接收,而client_max_body_size為“硬”限制。值為零表示無(wú)大小限制。

upload_limit_rate

聲名最大的上傳速度,0表示無(wú)限制

upload_max_output_body_len

聲名最大的輸出body大小,防止非file類型的輸入堆積到memory,0表示無(wú)限制

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,用來(lái)上傳時(shí)獲取進(jìn)度的id
獲取上傳進(jìn)度需向/progress發(fā)送一個(gè)get請(qǐng)求 /process?X-Progress-ID=FmN6gTEshAHCcUvR即可獲得上傳的進(jìn)度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容