Как заставить Apache Bench использовать IP-адреса, указанные в /etc/hosts?

Я использую ApacheBench для нагрузочного тестирования. Я хочу, чтобы ab разрешал имя хоста, используя IP-адрес, указанный в /etc/hosts на моем Mac. Как я могу заставить это? curl имеет параметр --resolve, чтобы сделать именно это, как указано здесь. Я ищу что-то подобное для ab.


person tinkerr    schedule 11.01.2015    source источник


Ответы (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.

person Mike    schedule 17.04.2015
comment
Спасибо, это работает! (Я пропустил завершающий / в IP-адресе, поэтому это выдало мне ошибку, выкрикивающую неверный URL-адрес, поэтому мне потребовалось некоторое время, чтобы понять, в чем была ошибка.) - person tinkerr; 18.07.2015

Для веб-сайтов на основе SSL, чтобы предотвратить получение 0 байтов:

ab -n 10 -c 10 -H "Host: www.example.com" https://93.184.216.34/

Хитрость заключается в том, чтобы включить поддомен (www) в имя хоста.

(ps не хватило баллов, чтобы просто добавить это как комментарий).

person Magistar    schedule 25.09.2017
comment
Спасибо, это полезный комментарий. - person tinkerr; 29.11.2017
comment
Я должен отметить, что когда я недавно сравнил свои результаты пресса с «реальными» результатами, я увидел разницу. Под реальными результатами я подразумеваю время до первого байта, отображаемое в вашем браузере (f12›network tools). Для некоторых веб-сайтов AB удалось достичь 250 мс, тогда как браузер отображал 900 мс. Так что этот метод все еще не совершенен. Однако значение AB хорошо масштабировалось с увеличением мощности процессора. Так что это не бесполезно. - person Magistar; 11.09.2019