使用Apache Benchmark模拟HTTP Basic认证后的Web Server压力测试

一、背景

某些应用服务器采用了HTTP Basic身份验证,整个Web Server和目录下的所有文件都需要先通过HTTP方式的身份验证,如果不通过,则返回HTTP 401错误。此时,如果希望直接直接请求目录下的文件,是无法立刻发起测试的。因此需要在对apache ab增加-A命令,进行身份验证。

注意:

  • Basic认证和NTLM是不同的认证方式,NTLM增加了Cookie;
  • 如果测试使用AWS ALB,ALB是不兼容NTLM认证的,请更换为NLB进行压力测试。

二、模拟HTTP Basic身份验证

本文以Amazon Linux 2为例,对应CentOS 7.x环境。执行如下命令安装apache。

yum install httpd
systemctl enable http

然后在/var/www/html目录下放置要测试的网页。

编辑 vim /var/www/html/.htaccess 文件,内容如下。

AuthType Basic
AuthName "Secure Content"
AuthBasicProvider file
AuthUserFile /var/www/html/.htpasswd
require user user1

接下来生成密码,执行如下命令。

htpasswd -c /var/www/html/.htpassword user1

接下来输入密码,并重复输入确认,即可为用户user1生成密码文件。

编辑 Apache 配置文件。执行如下命令。

vim /etc/httpd/conf/httpd.conf

找到配置文件中的 AllowOverride None,注意有多处,替换为 AllowOverride AuthConfig 。请分别修改多处。然后保存退出。执行如下命令重启web服务。

systemctl restart http

然后用浏览器访问web服务,即可发现浏览器弹出了对话框要求认证,输入user1的密码后即可正常访问。

三、使用ab发起性能测试

在ab命令中,增加-A和用户名密码,表示通过身份验证。其中download.tar.gz是提前生成的一个体积为100MB的被测试文件。执行如下命令。

ab -n 10 -A user1:1qazxsw2 http://52.80.221.9/report/download.tar.gz

返回结果如下。

This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 52.80.221.9 (be patient).....done


Server Software:        Apache/2.4.46
Server Hostname:        52.80.221.9
Server Port:            80

Document Path:          /report/download.tar.gz
Document Length:        108589315 bytes

Concurrency Level:      1
Time taken for tests:   9.260 seconds
Complete requests:      10
Failed requests:        0
Total transferred:      1085896020 bytes
HTML transferred:       1085893150 bytes
Requests per second:    1.08 [#/sec] (mean)
Time per request:       926.024 [ms] (mean)
Time per request:       926.024 [ms] (mean, across all concurrent requests)
Transfer rate:          114516.03 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:   916  926   6.2    927     935
Waiting:        1    1   0.1      1       1
Total:        917  926   6.2    927     936

Percentage of the requests served within a certain time (ms)
  50%    927
  66%    928
  75%    931
  80%    933
  90%    936
  95%    936
  98%    936
  99%    936
 100%    936 (longest request)

由此可以看到,ab压力测试工具通过了身份验证,正常的获取了请求,单次请求的网页提及大约100MB。

反之验证,如果将用户名和密码故意填写错误,此时将会接受到http 401错误,此时单词访问的网页大小就将只有不到1KB,这样也可以看出认证是否通过。

完。