nginx安装第三方模块file_md5-阿里云开发者社区

开发者社区> 像教授> 正文

nginx安装第三方模块file_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,之前已经安装过nginx,所以只添加模块,make即可;

注意:不用make install;


[root@localhost ~]# cd /usr/local/src/nginx-1.6.2

[root@localhost nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --with-pcre --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=../file-md5-master

[root@localhost nginx-1.6.2]#make

[root@localhost nginx-1.6.2]#cp objs/nginx /usr/local/nginx/sbin/

[root@localhost nginx-1.6.2]# /usr/local/nginx/sbin/nginx


3. 配置file-md5

3.1 MD5追加到http响应头中

server

{

listen 80;

server_name 192.168.20.10;

index index.html index.htm index.php;

root /data/test;

location ~ \.php$ {

include fastcgi_params;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/test$fastcgi_script_name;

}


       location ~ /download

       {

               add_header    Content-MD5    $file_md5;

       }

}


所有请求download的请求,都会在响应http头部增加Content-MD5,值为这个文件的MD5,看如下测试:

[root@localhost sbin]# md5sum /data/test/download/lanmp.sh

0899115c968bdfc004fcc956750ab8f2


[root@localhost sbin]# curl -I 192.168.20.10/download/lanmp.sh

HTTP/1.1 200 OK

Server: nginx/1.6.2

Date: Wed, 22 Feb 2017 08:23:34 GMT

Content-Type: application/octet-stream

Content-Length: 8276

Last-Modified: Wed, 22 Feb 2017 08:21:46 GMT

Connection: keep-alive

ETag: "58ad4a1a-2054"

Content-MD5: 0899115c968bdfc004fcc956750ab8f2

Accept-Ranges: bytes


测试同一个文件,不在download目录下,不会有MD5出现;

[root@localhost sbin]# curl -I 192.168.20.10/lanmp.sh

HTTP/1.1 200 OK

Server: nginx/1.6.2

Date: Wed, 22 Feb 2017 08:27:19 GMT

Content-Type: application/octet-stream

Content-Length: 8276

Last-Modified: Wed, 22 Feb 2017 08:27:10 GMT

Connection: keep-alive

ETag: "58ad4b5e-2054"

Accept-Ranges: bytes


3.2 直接响应MD5值到内容中

server {


       location ~ /download

       {

           if ( $arg_md5 ~* "true" ){

               echo $file_md5;

           }

       }

}


这边直接使用echo输出MD5值(echo模块需要额外安装),只需在下载的文件后面加上参数&md5=true即可得到MD5值,使用过程中,参数可以随心定义。


安装echo模块,需要重新编译,方法同上;

#wget https://github.com/openresty/echo-nginx-module/archive/v0.60.zip -O echo-nginx-module.zip

#unzip echo-nginx-module.zip

# ./configure --prefix=/usr/local/nginx --with-pcre --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=../file-md5-master --add-module=../echo-nginx-module-0.60


curl测试一下:

[root@localhost sbin]# curl 192.168.20.10/download/lanmp.sh?md5=true

0899115c968bdfc004fcc956750ab8f2


直接得到md5值,与第一种方法得到同样的MD5。


4. 最后

使用nginx模块也是一种方法,这种方法有个不足支持,每个请求都需要从新计算一次MD5值。想减小他的压力,可以在nginx加缓存,或者借用memcache以及使用perl或者lua等模块。





本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1900988,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9497 0
CDN
通过组策略管理模板强制允许安装第三方拓展(无禁用提示)
在开发者模式加载拓展吼,每次启动Chrome/Chromium系列浏览器都会有烦人的禁用弹窗,通过Chrome/Edge等提供的组策略模板把来源加入白名单可以从源头上制止这个弹窗
39 0
CentOS 第三方源实现yum安装(找了好久才找到的)
使用第三方源实现yum安装,推荐使用RPMforge,在centos下配置该yum源,配置后即可尝试yum install libmcrypt, yum install libmcrypt-devel, yum install mcrypt-devel 安装该库。
655 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10844 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13186 0
+关注
1338
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载