一、背景
某些应用服务器采用了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,这样也可以看出认证是否通过。
完。