1. 程式人生 > >centerOS 6.5安裝nginx並新增nginx-upload-module斷點續傳模組

centerOS 6.5安裝nginx並新增nginx-upload-module斷點續傳模組

第一步:安裝nginx:
1,如果沒有安裝pcre和openssl需要先安裝:

  yum -y install pcre*
  yum -y install openssl* 

2,下載nginx-1.7.8,例如我的nginx下載在/tmp資料夾下:

    wget http://nginx.org/download/nginx-1.7.8.tar.gz

3,解壓編譯安裝:
進入/tmp資料夾,解壓nginx:

   tar -zxvf nginx-1.7.8.tar.gz

進入解壓後的nginx-1.7.8資料夾:
進行編譯安裝:

進入資料夾:cd nginx-1.7
.8 執行下面的三條命令: ./configure make make install (此過程預設把nginx安裝在/usr/local資料夾下,如果想指定安裝路徑 ./configure --prefix=path)

4,安裝完成之後,重啟nginx:(nginx的預設埠是80)

/usr/local/nginx/sbin/nginx -s reload
如果重啟時候出錯報:
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
執行下面的命令:
 /usr/local
/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

5,關閉防火牆,或者新增防火牆規則:
A 關閉防火牆:

service iptables stop

B 或者新增防火牆規則:

vi /etc/sysconfig/iptables
編輯防火牆檔案

新增這樣一條開放80埠的規則後儲存:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重啟服務即可:
service iptables restart

第二步,新增nginx-upload-module模組


1,下載模組,下載到/tmp:

cd /tmp
wget https://codeload.github.com/vkholodkov/nginx-upload-module/zip/2.2
unzip 2.2

2,安裝模組:

進入到nginx原始碼所在的資料夾,就是我剛才的nginx解壓後的資料夾,/tmp/nginx-1.7.8 執行下面兩條指令:

.configure --add-module=/tmp/nginx-upload-module-2.2/

make //注意,如果是新增模組,只需要make,不要執行make install 否則會覆蓋安裝。

3,配置 nginx的配置檔案(在/usr/local/nginx/conf路徑下),新增以下規則:

server {
[...]
        location /resumable_upload {
                #開啟斷點續傳功能
                upload_resumable on; 
                #斷點續傳臨時目錄(必須存在)
                upload_state_store /usr/local/nginx/upload_temp ;
                #檔案儲存目錄(必須存在)
                upload_store /usr/local/nginx/upload_temp;
                upload_set_form_field $upload_field_name.path "$upload_tmp_path";
        }
[...]
}

配置完之後,需要重啟nginx

3,測試:
1,開啟日誌可以檢視上傳情況:

  在/usr/local/nginx/logs下有日誌檔案access.logerror.log:
     開啟兩個終端檢視日誌:
     檢視access.log:   tail -f access.log
     檢視error.log:    tail -f error.log

2,編輯上傳示例的python檔案;
ptyhon原始碼:

#!/usr/bin/python
# -*- coding: utf-8 -*- 


import os.path
import requests
import hashlib

# 待上傳檔案路徑
FILE_UPLOAD = "/tmp/test"
# 上傳介面地址
UPLOAD_URL = "http://localhost:80/resumable_upload"


def upload(fp, file_pos, size, file_size):
    session_id = get_session_id()
    fp.seek(file_pos)
    payload = fp.read(size)
    content_range = "bytes {file_pos}-{pos_end}/{file_size}".format(file_pos=file_pos,
                    pos_end=file_pos+size-1,file_size=file_size)
    headers = {'Content-Disposition': 'attachment; filename="big.TXT"','Content-Type': 'application/octet-stream',
                'X-Content-Range':content_range,'Session-ID': session_id,'Content-Length':str(size)}
    res = requests.post(UPLOAD_URL, data=payload, headers=headers)
    print(res.text)


# 根據檔名hash獲得session id
def get_session_id():
    m = hashlib.md5()
    file_name = os.path.basename(FILE_UPLOAD)
    m.update(file_name)
    return m.hexdigest()

def main():

    file_pos = 0

    # 單個片段上傳的位元組數
    file_s = 8

    file_size = os.path.getsize(FILE_UPLOAD)
    fp = open(FILE_UPLOAD,"r")

    while True:
        if file_pos + file_s>= file_size:
            upload(fp, file_pos, file_size - file_pos, file_size)
            fp.close()
            break
        else:
            upload(fp, file_pos, file_s, file_size)
            file_pos = file_pos + file_s

if __name__ == "__main__":
    main()

執行 python檔案,就能看到日誌列印結果,以及在上傳資料夾下找到上傳的檔案。
參考內容: