通過Nginx伺服器獲取大檔案MD5值的配置方法

2022-09-25 19:33:10 字數 2064 閱讀 6640

http協議新增了content-md5 http頭,但是nginx並不支援這個功能,而且官方也明確表示不會增加這項功能,為什麼呢?因為每次請求都需要讀取整個檔案來計算md5值,以效能著稱的nginx絕對不願意幹出違背軟體宗旨的事情。但是有些應用中,需要驗證檔案的正確性,有些人通過**當前檔案,然後計算md5值來比對當前檔案是否正確。不僅僅浪費頻寬資源也浪費了大把的時間。有需求就有解決方案,網友開發了file-md5模組。

1. **模組file-md5

# cd /usr/local/src

# wget -o file-md5-master.zip

# unzip file-md5-master.zip

2. 安裝模組file-md5

# wget

# tar -xzf nginx-1.4.2.tar.gz

# cd nginx-1.4.2

# ./configure --prefix=/usr/local/nginx-1.4.2 --add-module=../file-md5-master

# make

# make isntall

如果你已經安裝了nginx,僅需要增加file-md5模程式設計客棧塊即可。

3. 配置file-md5

3.1 md5追加到http響應頭中

server

}所有請求download的請求,都會程式設計客棧在響應http頭部增加content-md5,值為這個檔案的md5,看如下測試:

大家可以看到contwww.cppcns.coment-md5: 6adda4a0www.cppcns.com6dbad3ac9b53a08f4ff9c4f8,這個就是1.exe檔案的md5值.

3.2 直接響應md5值到內容中

server }}

這邊直接使用echo輸出md5值(echo模組需要額外安裝),只需在**的檔案後面加上引數&md5=true即可得到md5值,使用過程中,引數可以隨心定義。下面來測試一下。

直接得到md5值,與第一種方法得到同樣的md5。

4. 最後

使用nginx模組也是一種方法,這種方法有個不足支援,每個請求都需要從新計算一次md5值。想減小他的壓力,可以在nginx加快取,或者借用memcache以及使用perl或者lua等模組,希望大家繼續支援運維生存時間。

專案位址:

專案文件:/blob/master/readme

ps:nginx大檔案**優化

預設情況下proxy_max_temp_file_size值為1024mb,也就是說後端伺服器的檔案不大於1g都可以快取到nginx**硬碟中,如果超過1g,那麼檔案不快取,而是直接中**送給客戶端.如果proxy_max_temp_file_size設定為0,表示不使用臨時快取。

在大檔案的環境下,如果想啟用臨時快取,那麼可以修改配置,值改成程式設計客棧你想要的。

修改nginx配置

location /

重啟nginx

# /usr/local/nginx-1.7.0/sbin/nginx -s reload

本文標題: 通過nginx伺服器獲取大檔案md5值的配置方法

本文位址:

nginx 伺服器大檔案上傳時500錯誤

採用nginx作反向 出現了乙個詭異的問題,小檔案可以提交,大檔案會報500內部錯誤。這個是什麼原因導致的呢?查wiki可知,上傳檔案大小相關的有三個配置 client body buffer size 配置請求體快取區大小,不配的話,client body temp path 設定臨時檔案存放路徑...

nginx 伺服器大檔案上傳時500錯誤

採用nginx作反向 出現了乙個詭異的問題,小檔案可以提交,大檔案會報500內部錯誤。這個是什麼原因導致的呢?查wiki可知,上傳檔案大小相關的有三個配置 client body buffer size 配置請求體快取區大小,不配的話,client body temp path 設定臨時檔案存放路徑...

大檔案跨伺服器傳送

2015年9月15日 19 02 47 高效能mysql 裡的內容 場景是將資料從乙個伺服器傳遞到另乙個伺服器中用於mysql資料初始化或恢復 本質的原理是壓縮傳輸 1.使用管道命令,壓縮的時候直接傳輸,不再壓縮到本地,再傳輸到另一台server壓縮 server1 gzip c server1 d...