国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > Nginx > 正文

通過Nginx服務器獲取大文件MD5值的配置方法

2024-08-30 12:27:59
字體:
供稿:網(wǎng)友
這篇文章主要介紹了通過Nginx服務器獲取大文件MD5值的配置方法,同時文中也附帶了對大文件下載優(yōu)化的介紹,需要的朋友可以參考下
 

HTTP協(xié)議新增了Content-MD5 HTTP頭,但是nginx并不支持這個功能,而且官方也明確表示不會增加這項功能,為什么呢?因為每次請求都需要讀取整個文件來計算MD5值,以性能著稱的nginx絕對不愿意干出違背軟件宗旨的事情。但是有些應用中,需要驗證文件的正確性,有些人通過下載當前文件,然后計算MD5值來比對當前文件是否正確。不僅僅浪費帶寬資源也浪費了大把的時間。有需求就有解決方案,網(wǎng)友開發(fā)了file-md5模塊。
1. 下載模塊file-md5

  # cd /usr/local/src  # wget https://github.com/cfsego/file-md5/archive/master.zip -O file-md5-master.zip  # unzip file-md5-master.zip

2. 安裝模塊file-md5

  # wget http://nginx.org/download/nginx-1.4.2.tar.gz  # 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

如果你已經(jīng)安裝了nginx,僅需要增加file-md5模塊即可。

3. 配置file-md5
3.1 MD5追加到http響應頭中

  server {    listen    80;    server_name test.ttlsa.com;    root /data/site/test.ttlsa.com;      # for add content-md5 to http header    location ~ /download    {        add_header  Content-MD5  $file_md5;    }  }

所有請求download的請求,都會在響應http頭部增加Content-MD5,值為這個文件的MD5,看如下測試:

 

  # curl -I test.ttlsa.com/download/1.exe    HTTP/1.1 200 OK  Server: nginx  Date: Wed, 26 Feb 2014 03:00:05 GMT  Content-Type: application/octet-stream  Content-Length: 1535488  Last-Modified: Mon, 24 Feb 2014 10:08:10 GMT  Connection: keep-alive  ETag: "530b1a0a-176e00"  Content-MD5: 6adda4a06dbad3ac9b53a08f4ff9c4f8  Accept-Ranges: bytes

大家可以看到Content-MD5: 6adda4a06dbad3ac9b53a08f4ff9c4f8,這個就是1.exe文件的MD5值.
3.2 直接響應MD5值到內(nèi)容中

  server {    listen    80;    server_name test.ttlsa.com;    root /data/site/test.ttlsa.com;     # for add content-md5 to http header    location ~ /download    {      if ( $arg_md5 ~* "true" ){        echo $file_md5;      }    }  }

這邊直接使用echo輸出MD5值(echo模塊需要額外安裝),只需在下載的文件后面加上參數(shù)&md5=true即可得到MD5值,使用過程中,參數(shù)可以隨心定義。下面來測試一下。

  # curl test.ttlsa.com/download/1.exe?md5=true    6adda4a06dbad3ac9b53a08f4ff9c4f8

直接得到md5值,與第一種方法得到同樣的MD5。
4. 最后
使用nginx模塊也是一種方法,這種方法有個不足支持,每個請求都需要從新計算一次MD5值。想減小他的壓力,可以在nginx加緩存,或者借用memcache以及使用perl或者lua等模塊,希望大家繼續(xù)支持運維生存時間。
項目地址:https://github.com/cfsego/file-md5
項目文檔:https://github.com/cfsego/file-md5/blob/master/README

PS:nginx大文件下載優(yōu)化
默認情況下proxy_max_temp_file_size值為1024MB,也就是說后端服務器的文件不大于1G都可以緩存到nginx代理硬盤中,如果超過1G,那么文件不緩存,而是直接中轉(zhuǎn)發(fā)送給客戶端.如果proxy_max_temp_file_size設置為0,表示不使用臨時緩存。
在大文件的環(huán)境下,如果想啟用臨時緩存,那么可以修改配置,值改成你想要的。
修改nginx配置

location / { ... proxy_max_temp_file_size 2048m; ... }

重啟nginx

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 循化| 绥德县| 山阴县| 苏尼特右旗| 石泉县| 蓝山县| 永宁县| 七台河市| 灵山县| 海南省| 青海省| 滦平县| 馆陶县| 呈贡县| 云浮市| 谷城县| 全椒县| 宁晋县| 合阳县| 西乡县| 宜兴市| 彝良县| 广平县| 涞源县| 宁化县| 颍上县| 化德县| 保德县| 凤台县| 宿迁市| 罗城| 松潘县| 城口县| 桐城市| 瓮安县| 循化| 九龙县| 海安县| 宁城县| 徐州市| 翼城县|