如何强制 Apache Bench 使用 /etc/hosts 中指定的 IP 地址?
How to force Apache Bench to use IP addresses specified in /etc/hosts?
我正在使用 ApacheBench 进行一些负载测试。我想在我的 Mac 上使用 /etc/hosts 中指定的 IP 地址解析主机名。我怎么能强迫它? curl 有一个 --resolve 选项可以做到这一点,正如指定的那样 here。我正在为 ab 寻找类似的东西。
反过来想想:你可以让 Curl 命中一个 IP 地址,然后指定 Host
header 来触发所需的域。
curl example.com
curl --header "Host: example.com" 93.184.216.34
同样的方法适用于 ab
使用 -H
标志,因此
ab -n 10 -c 10 http://example.com/
ab -n 10 -c 10 -H "Host: example.com" http://93.184.216.34/
希望对您有所帮助。
编辑:
借用@Magistar 的回答,您想确保您使用的是正确的协议(http
vs https
)并且使用的是正确的 FQD。也就是说,如果您的网站响应 www.example.com
而不是 example.com
(没有 www
),请务必使用有效的网站。
另一件需要注意的事情是确保您没有对重定向进行负载测试。例如,运行 ab
反对 yahoo.com
(我不建议这样做)将不是一个好的测试,因为 yahoo.com
会立即重定向到 www.yahoo.com
如果你 curl
它处于详细模式,你可以看到它:
# curl yahoo.com
redirect
# curl yahoo.com -v
* About to connect() to yahoo.com port 80 (#0)
* Trying 98.139.180.180...
* Connected to yahoo.com (98.139.180.180) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: yahoo.com
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Date: Wed, 07 Mar 2018 13:46:53 GMT
< Connection: keep-alive
< Via: http/1.1 media-router-fp29.prod.media.bf1.yahoo.com (ApacheTrafficServer [c s f ])
< Server: ATS
< Cache-Control: no-store, no-cache
< Content-Type: text/html
< Content-Language: en
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=2592000
< Location: https://www.yahoo.com/
< Content-Length: 8
<
* Connection #0 to host yahoo.com left intact
redirect
或者更具体地说,因为这是关于将主机欺骗到目标 IP 地址:
# curl --header "Host: yahoo.com" 98.139.180.180 -v
* About to connect() to 98.139.180.180 port 80 (#0)
* Trying 98.139.180.180...
* Connected to 98.139.180.180 (98.139.180.180) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> Host: yahoo.com
>
< HTTP/1.1 301 Moved Permanently
< Date: Wed, 07 Mar 2018 13:51:26 GMT
< Connection: keep-alive
< Via: http/1.1 media-router-fp82.prod.media.bf1.yahoo.com (ApacheTrafficServer [c s f ])
< Server: ATS
< Cache-Control: no-store, no-cache
< Content-Type: text/html
< Content-Language: en
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=2592000
< Location: https://www.yahoo.com/
< Content-Length: 8
<
* Connection #0 to host 98.139.180.180 left intact
redirect
因此请务必先 curl
url,以确保它返回您期望的数据,然后继续 ab
。
对于基于 SSL 的网站以防止获取 0 字节:
ab -n 10 -c 10 -H "Host: www.example.com" https://93.184.216.34/
诀窍是在主机名中包含子域 (www)。
(ps 没有足够的积分,只能将其添加为评论)。
我正在使用 ApacheBench 进行一些负载测试。我想在我的 Mac 上使用 /etc/hosts 中指定的 IP 地址解析主机名。我怎么能强迫它? curl 有一个 --resolve 选项可以做到这一点,正如指定的那样 here。我正在为 ab 寻找类似的东西。
反过来想想:你可以让 Curl 命中一个 IP 地址,然后指定 Host
header 来触发所需的域。
curl example.com
curl --header "Host: example.com" 93.184.216.34
同样的方法适用于 ab
使用 -H
标志,因此
ab -n 10 -c 10 http://example.com/
ab -n 10 -c 10 -H "Host: example.com" http://93.184.216.34/
希望对您有所帮助。
编辑:
借用@Magistar 的回答,您想确保您使用的是正确的协议(http
vs https
)并且使用的是正确的 FQD。也就是说,如果您的网站响应 www.example.com
而不是 example.com
(没有 www
),请务必使用有效的网站。
另一件需要注意的事情是确保您没有对重定向进行负载测试。例如,运行 ab
反对 yahoo.com
(我不建议这样做)将不是一个好的测试,因为 yahoo.com
会立即重定向到 www.yahoo.com
如果你 curl
它处于详细模式,你可以看到它:
# curl yahoo.com
redirect
# curl yahoo.com -v
* About to connect() to yahoo.com port 80 (#0)
* Trying 98.139.180.180...
* Connected to yahoo.com (98.139.180.180) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: yahoo.com
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Date: Wed, 07 Mar 2018 13:46:53 GMT
< Connection: keep-alive
< Via: http/1.1 media-router-fp29.prod.media.bf1.yahoo.com (ApacheTrafficServer [c s f ])
< Server: ATS
< Cache-Control: no-store, no-cache
< Content-Type: text/html
< Content-Language: en
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=2592000
< Location: https://www.yahoo.com/
< Content-Length: 8
<
* Connection #0 to host yahoo.com left intact
redirect
或者更具体地说,因为这是关于将主机欺骗到目标 IP 地址:
# curl --header "Host: yahoo.com" 98.139.180.180 -v
* About to connect() to 98.139.180.180 port 80 (#0)
* Trying 98.139.180.180...
* Connected to 98.139.180.180 (98.139.180.180) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> Host: yahoo.com
>
< HTTP/1.1 301 Moved Permanently
< Date: Wed, 07 Mar 2018 13:51:26 GMT
< Connection: keep-alive
< Via: http/1.1 media-router-fp82.prod.media.bf1.yahoo.com (ApacheTrafficServer [c s f ])
< Server: ATS
< Cache-Control: no-store, no-cache
< Content-Type: text/html
< Content-Language: en
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=2592000
< Location: https://www.yahoo.com/
< Content-Length: 8
<
* Connection #0 to host 98.139.180.180 left intact
redirect
因此请务必先 curl
url,以确保它返回您期望的数据,然后继续 ab
。
对于基于 SSL 的网站以防止获取 0 字节:
ab -n 10 -c 10 -H "Host: www.example.com" https://93.184.216.34/
诀窍是在主机名中包含子域 (www)。
(ps 没有足够的积分,只能将其添加为评论)。