通过Nginx服务器获取大文件MD5值的配置方法

 更新时间:2016年01月22日 09:37:12   投稿:goldensun  
这篇文章主要介绍了通过Nginx服务器获取大文件MD5值的配置方法,同时文中也附带了对大文件下载优化的介绍,需要的朋友可以参考下

HTTP协议新增了Content-MD5 HTTP头,但是nginx并不支持这个功能,而且官方也明确表示不会增加这项功能,为什么呢?因为每次请求都需要读取整个文件来计算MD5值,以性能著称的nginx绝对不愿意干出违背软件宗旨的事情。但是有些应用中,需要验证文件的正确性,有些人通过下载当前文件,然后计算MD5值来比对当前文件是否正确。不仅仅浪费带宽资源也浪费了大把的时间。有需求就有解决方案,网友开发了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

如果你已经安装了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值到内容中

  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模块需要额外安装),只需在下载的文件后面加上参数&md5=true即可得到MD5值,使用过程中,参数可以随心定义。下面来测试一下。

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

直接得到md5值,与第一种方法得到同样的MD5。
4. 最后
使用nginx模块也是一种方法,这种方法有个不足支持,每个请求都需要从新计算一次MD5值。想减小他的压力,可以在nginx加缓存,或者借用memcache以及使用perl或者lua等模块,希望大家继续支持运维生存时间。
项目地址:https://github.com/cfsego/file-md5
项目文档:https://github.com/cfsego/file-md5/blob/master/README

PS:nginx大文件下载优化
默认情况下proxy_max_temp_file_size值为1024MB,也就是说后端服务器的文件不大于1G都可以缓存到nginx代理硬盘中,如果超过1G,那么文件不缓存,而是直接中转发送给客户端.如果proxy_max_temp_file_size设置为0,表示不使用临时缓存。
在大文件的环境下,如果想启用临时缓存,那么可以修改配置,值改成你想要的。
修改nginx配置

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

重启nginx

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

相关文章

  • 详解Nginx服务器中的nginx.conf配置文件

    详解Nginx服务器中的nginx.conf配置文件

    这篇文章主要介绍了详解Nginx服务器中的nginx.conf配置文件,包括对HTTP服务的基本配置方法,需要的朋友可以参考下
    2015-08-08
  • Nginx 配置 HTTPS的详细过程

    Nginx 配置 HTTPS的详细过程

    这篇文章主要介绍了Nginx 配置 HTTPS 完整过程,包括nginx 的 ssl 模块安装,ssl 证书部署,nginx.conf 配置,重启 nginx无信息提示就成功啦,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 利用Nginx的map指令实现页面跳转

    利用Nginx的map指令实现页面跳转

    每位网站运营人可能都会碰到一些情况,比如网站URL规则会进行调整,需求的不断变化也会导致一些旧的URL无法访问,这个时候可以使用Nginx的 map指令匹配这些旧的URL,并跳转到新的URL规则,而且这种方式是在Nginx层面进行,不会对网站性能产生影响。下面来一起看看吧。
    2016-10-10
  • 详解Nginx虚拟主机配置中server_name的具体写法

    详解Nginx虚拟主机配置中server_name的具体写法

    这篇文章主要介绍了Nginx虚拟主机配置中server_name的具体写法,server_name服务器名是虚拟主机中必须配置的重要参数,需要的朋友可以参考下
    2016-03-03
  • nginx服务器通过配置来解决API的跨域问题

    nginx服务器通过配置来解决API的跨域问题

    这篇文章主要给大家介绍了关于nginx服务器是如何配置来解决API跨域问题的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • 如何配置Nginx每个进程最多打开的文件数量

    如何配置Nginx每个进程最多打开的文件数量

    这篇文章主要介绍了配置Nginx每个进程最多打开的文件数量,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Nginx反向代理springboot的jar包过程解析

    Nginx反向代理springboot的jar包过程解析

    这篇文章主要介绍了Nginx反向代理springboot的jar包过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Nginx如何根据前缀路径转发到不同的Flask服务

    Nginx如何根据前缀路径转发到不同的Flask服务

    这篇文章主要介绍了Nginx如何根据前缀路径转发到不同的Flask服务,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Nginx一键安装部署静态网页的过程详解

    Nginx一键安装部署静态网页的过程详解

    这篇文章主要介绍了Nginx一键安装部署静态网页,主要介绍nginx安装和部署,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-06-06
  • Nginx防盗链的3种方法

    Nginx防盗链的3种方法

    Nginx防盗链的3种方法,需要的朋友可以参考下。
    2010-12-12

最新评论