Я использую ApacheBench для нагрузочного тестирования. Я хочу, чтобы ab разрешал имя хоста, используя IP-адрес, указанный в /etc/hosts на моем Mac. Как я могу заставить это? curl имеет параметр --resolve, чтобы сделать именно это, как указано здесь. Я ищу что-то подобное для ab.
Как заставить Apache Bench использовать IP-адреса, указанные в /etc/hosts?
Ответы (2)
Подумайте об этом с другой стороны: вы можете сказать Curl, чтобы он нажал на IP-адрес, и указать заголовок Host
для запуска нужного домена.
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
против 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 не хватило баллов, чтобы просто добавить это как комментарий).