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;


[[email protected] ~]# cd /usr/local/src/nginx-1.6.2

[[email protected] 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

[[email protected] nginx-1.6.2]#make

[[email protected] nginx-1.6.2]#cp objs/nginx /usr/local/nginx/sbin/

[[email protected] 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,看如下测试:

[[email protected] sbin]# md5sum /data/test/download/lanmp.sh

0899115c968bdfc004fcc956750ab8f2

[[email protected] 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出现;

[[email protected] 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测试一下:

[[email protected] sbin]# curl 192.168.20.10/download/lanmp.sh?md5=true

0899115c968bdfc004fcc956750ab8f2

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

4. 最后

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

时间: 2024-11-10 00:14:01

nginx安装第三方模块file_md5的相关文章

nginx 安装第三方模块(lua)并热升级

需求: nginx上将特定请求拒绝,并返回特定值. 解决办法: 使用lua脚本,实现效果. 操作步骤: 安装Luajit环境 重新编译nginx(原先nginx -V 配置一致,并新增两个模块ngx_devel_kit,lua-nginx-module) 热升级(不中断服务) 配置文件添加lua脚本: #匹配请求体里的 hello=world时返回此变量和值 location /hello { rewrite_by_lua_block { ngx.req.read_body() local ow

nginx安装第三方模块

原已经安装好的nginx,现在需要添加一个未被编译安装的模块 举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存) nginx的模块是需要重新编译nginx,而不是像apache一样配置文件引用.so 1.wget http://labs.frickle.com/files/ngx_cache_purge-2.0.tar.gz tar -zxvf ngx_cache_purge-2.0.tar.gz cd /data0/software/nginx-1.1.10

nginx安装第三方模块的方法

nginx第三方模块安装方法: ./configure --prefix=/你的安装目录 --add-module=/第三方模块目录 以安装fair模块实例 下载fair安装包并解压 1.在未安装nginx的情况下安装nginx第三方模块 # ./configure --prefix=/usr/local/nginx-1.9.9 --add-module=/temp/nginx-upstream-fair-master # make # make isntall # /usr/local/ngi

nginx安装第三方模块echo

要使用第三方模块ngx_echo的功能,请重新配置添加到nginx插件中 ##下载第三方模块 wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz tar -zxvf v0.61.tar.gz ##解压 cd nginx-1.15.8 ##进入nginx源码目录,准备重新配置nginx ##配置,--add-module指向模块目录即会安装插件到nginx中 ./configure --add-modul

nginx(四)安装第三方模块

nginx文件非常小但是性能非常的高效,这方面完胜apache,nginx文件小的一个原因之一是nginx自带的功能相对较少,好在nginx允许第三方模块,第三方模块使得nginx越发的强大. 在安装模块方面,nginx显得没有apache安装模块方便,当然也没有php安装扩展方便.在原生的nginx,他不可以动态加载模块,所以当你安装第三方模块的时候需要覆盖nginx文件.接下来看看如何安装nginx第三模块吧. nginx第三方模块安装方法: ./configure --prefix=/你的

nginx增加第三方模块

增加第三方模块 ============================================================ 一.概述nginx文件非常小但是性能非常的高效,这方面完胜apache.nginx文件小的一个原因之一是nginx自带的功能相对较少,好在nginx允许第三方模块,第三方模块使得nginx越发的强大. nginx已支持动态加载模块 二.安装第三方模块./configure --prefix=源安装目录 --add-module=/第三方模块解压目录 以安装ng

Nginx的第三方模块ngx-fancyindex安装

一.ngx-fancyindex模块的简介: Nginx Web 服务器自带的目录浏览功能看起来并不是那么的美观,我们可以使用ngx-fancyindex插件来美化目录浏览功能. 我们到https://github.com/aperezdc/ngx-fancyindex 下载ngx-fancyindex 二.在未安装nginx的情况下安装nginx第三方模块: #tar xf nginx-1.8.0.tar.gz #unzip ngx-fancyindex-master.zip #cd ngin

使用tengine DSO 来动态编译安装第三方模块(Lua

在使用nginx时,需要增加或者改动一个模块,都需要重新编译nginx文件.最近使用了tengine,它提供的DSO工具来动态加载模块.本例测试需要动态增加lua-nginx模块,记录一下安装过程. 1. 编译安装 luajit Lua 环境推荐使用成熟快速的 luajit. 1 2 3 4 5 cd /root/Download/ wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz tar zxvf LuaJIT-2.0.4.tar.gz c

安装第三方模块

python安装第三方模块 方法1:使用软件管理工具(pip,pip2,pip3) python2和python3都自带了pip,而pip就仿佛有一个仓库,将我们需要安装的第三方模块都收纳其中,使用简 单的安装命令即可完成安装. 注意事项:用python3自带的pip或者pip3安装的第三方模块就只能为python3的编译器使用,这对于python2 的pip和pip2是同理的. 所以在我们需要对某一版本的python安装第三方模块的时候,就将原先的路径删除,增加对应的路径至环境变量. 个人推荐