码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx添加Content-MD5头部压测分析

时间:2015-12-11 20:32:27      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

此文转载必须注明原文地址,请尊重作者的劳动成果!

1.1  

Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。Webbench最多可以模拟3万个并发连接去测试网站的负载能力。

1.2 安装

#wget http://home.tiscali.cz/~cz210552/webbench.html/webbench-1.5.tar.gz

#tar zxvf webbench-1.5.tar.gz

#cd webbench-1.5

#make

#make install

 

1.3 webbench使用

webbench -c 1000 -t 60 http://test.my4399.com/download/md5.html

webbench -c 并发数 -t 运行测试时间 URL

2 nginx添加file-md5模块

2.1 简介

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

2.2 下载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.3 下载nginx-1.4.2

# wget http://nginx.org/download/nginx-1.4.2.tar.gz

# tar -xzf nginx-1.4.2.tar.gz

# cd nginx-1.4.2

2.4 下载pcre-8.38.tar.gz

tar xvf pcre-8.38.tar.gz -C /usr/local/src/

2.5    编译file-md5模块

#./configure --prefix=/usr/local/nginx-1.4.2  --add-module=../file-md5-master --with-pcre=../pcre-8.38/  --with-openssl=/usr/include

#make

#make install

 

2.6 配置vhost文件

server {

        listen       80;

        server_name  test.my4399.com;

        root /data/web/test;

   

        # for add content-md5 to http header

        location ~ /download

        {

                add_header    Content-MD5    $file_md5;

        }

    }

2.7 启动nginx

#cd /usr/local/nginx-1.4.2

#./sbin/nginx -c conf/nginx.conf

3 nginx添加perl模块

3.1 准备perl模块相关文件

#cd /usr/local/nginx-1.4.2/

 

将以下ContentMD5.pm文件存放于/usr/local/nginx-1.4.2/perl/lib/下,文件名必须是ContentMD5.pm

# nginx Embedded Perl module for adding a Content-MD5 HTTP header

#

# This perl module, will output an MD5 of a requested file using the

# Content-MD5 HTTP header, by either pulling it from a file of the

# same name with .md5 appended to the end, if it exists, or will

# calculate the MD5 hex hash on the fly

#

# Author: Matt Martz <matt@sivel.net>

# Link: https://gist.github.com/1870822#file_content_md5.pm

# License: http://www.nginx.org/LICENSE

 

package ContentMD5;

use nginx;

use Digest::MD5;

 

sub handler {

        my $r = shift;

        my $filename = $r->filename;

 

        return DECLINED unless -f $filename;

 

        my $content_length = -s $filename;

        my $md5;

 

        if ( -f "$filename.md5" ) {

                open( MD5FILE, "$filename.md5" ) or return DECLINED;

                $md5 = <MD5FILE>;

                close( MD5FILE );

                $md5 =~ s/^\s+//;

                $md5 =~ s/\s+$//;

                $md5 =~ s/\ .*//;

        } else {

                open( FILE, $filename ) or return DECLINED;

                my $ctx = Digest::MD5->new;

                $ctx->addfile( *FILE );

                $md5 = $ctx->hexdigest;

                close( FILE );

        }

 

        $r->header_out( "Content-MD5", $md5 ) unless ! $md5;

 

        return DECLINED;

}

1;

 

3.2 编译

#cd  /usr/local/src/nginx-1.4.2

# ./configure --prefix=/usr/local/nginx-1.4.2 --with-pcre=../pcre-8.38/ --with-openssl=/usr/include --with-http_stub_status_module --with-http_perl_module --with-http_addition_module --with-http_realip_module --with-http_sub_module

#make

#make install

3.3 编辑nginx.conf

在http字段里面添加

perl_modules perl/lib;

perl_require ContentMD5.pm;

 

3.4 编辑vhost

server {

        listen       80;

        server_name  test.my4399.com;

        root /data/web/test;

 

        location / {

            root /data/web/test;

            index index.html;

        }

 

        location /download {

            perl ContentMD5::handler;

        }

}

3.5 启动nginx

#chown  www.www  /usr/local/nginx-1.4.2 -R

#cd /usr/local/nginx-1.4.2

#./sbin/nginx -c conf/nginx.conf

 

4 压测结果

4.1 使用file-md5模块

使用以下链接,然后同时使用chrome的F12访问,查看返回时间。

 

time webbench -c 2700 -t 60 http://test.my4399.com/download/md5.html

 

4.2 使用perl模块

使用以下链接,然后同时使用chrome的F12访问,查看返回时间。

 

time webbench -c 2700 -t 60  http://test.my4399.com/download/md5_perl.html

 

5 参考资料

http://www.ttlsa.com/nginx/nginx-modules-ngx_file_md5

https://gist.github.com/sivel/1870822

Nginx添加Content-MD5头部压测分析

标签:

原文地址:http://www.cnblogs.com/lyongerr/p/5040054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!