通过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

相关文章

  • HAProxy和Nginx搭建负载均衡器的实现

    HAProxy和Nginx搭建负载均衡器的实现

    负载均衡器是一个常用于分布式计算和网络应用中的系统组件,主要用于将客户端的请求分发到多个后端服务器上,以实现高可用性、高性能和可扩展性,本文主要介绍了HAProxy和Nginx搭建负载均衡器的实现,感兴趣的可以了解一下,感兴趣的可以了解一下
    2023-11-11
  • nginx 拦截指定ip访问指定url的实现示例

    nginx 拦截指定ip访问指定url的实现示例

    本文主要介绍了nginx 拦截指定ip访问指定url的实现示例,使用$http_x_forwarded_for变量来获取客户端的真实IP地址,感兴趣的可以了解一下
    2024-12-12
  • OpenResty中实现按QPS、时间范围、来源IP进行限流的方法

    OpenResty中实现按QPS、时间范围、来源IP进行限流的方法

    OpenResty是一个基于Nginx与Lua的高性能Web平台,它通过LuaJIT在Nginx中运行高效的Lua脚本和模块,可以用来处理复杂的网络请求,并且支持各种流量控制和限制的功能,这篇文章主要介绍了OpenResty中实现按QPS、时间范围、来源IP进行限流,需要的朋友可以参考下
    2024-02-02
  • Nginx服务器高性能优化的配置方法小结

    Nginx服务器高性能优化的配置方法小结

    这篇文章主要介绍了Nginx服务器高性能优化的配置方法小结,包括一些内核参数的优化介绍,需要的朋友可以参考下
    2015-12-12
  • 修改Nginx与Apache上传文件大小限制

    修改Nginx与Apache上传文件大小限制

    这篇文章主要介绍了修改Nginx与Apache上传文件大小限制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Nginx 如何部署指定文件夹下的项目(本地测试)

    Nginx 如何部署指定文件夹下的项目(本地测试)

    这篇文章主要介绍了Nginx 如何部署指定文件夹下的项目(本地测试),分为配置vue.config.js,指定生成环境的包,配置路由模式为hash(history模式刷新后,找不到页面),本文讲解的非常详细,需要的朋友可以参考下
    2024-01-01
  • Nginx端口映射配置方法

    Nginx端口映射配置方法

    这篇文章主要介绍了Nginx端口映射配置方法和多端口映射,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 详解Nginx实战之让用户通过用户名密码认证访问web站点

    详解Nginx实战之让用户通过用户名密码认证访问web站点

    这篇文章主要介绍了详解Nginx实战之让用户通过用户名密码认证访问web站点,有兴趣的可以了解一下。
    2016-11-11
  • Nginx和GeoIP模块读取IP所在的地域信息方法

    Nginx和GeoIP模块读取IP所在的地域信息方法

    今天小编就为大家分享一篇Nginx和GeoIP模块读取IP所在的地域信息方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Nginx代理Partainer的实现

    Nginx代理Partainer的实现

    本文主要介绍了Nginx代理Partainer的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论