
У меня есть сервер с Apache/2.4.6 (CentOS)
+ OpenSSL/1.0.2k-fips
(я знаю, что это старая версия Apache, но сейчас ее нельзя обновить). Событие mpm используется для многопроцессорной обработки.
При подаче HTTP
контента все работает так, как и ожидалось:
Сервер может обрабатывать много запросов одновременно без проблем (тест проводился примерно с 150 клиентами, каждый из которых создавал 4 параллельных соединения = 600 соединений). Все запросы нацелены на статический контент и используют keepalive.
с HTTPS/SSL
, это другая история.
Он быстро использует все 400 возможных потоков (см. табло). Асинхронных соединений не будет. Насколько мне известно, он ведет себя как mpm worker
.
Сначала я думал, что это ограничение и это mpm event
будет работать только с HTTP. Но это не то, что написано вдокументация(подКак это работает>Асинхронные соединения) :
Эти улучшения действительны для обоих соединений HTTP/HTTPS.
EDIT: есть некоторая информация вОграниченияразделдокументациякоторые объясняют, что в некоторых случаях он может вернуться к mpm worker
. Однако, похоже, это здесь не применимо.
решение1
При рассмотрении исходного кода Apache на предмет возможныхmpm worker
условий отката я обнаружил следующее:комментарий:
Если у нас есть входной фильтр, который «засоряет» входной поток, как это делал mod_ssl, давайте просто выполним обычное чтение из входных фильтров, как это делает Worker MPM.
Поскольку я использую старую версию Apache, это может быть причиной mpm event
некорректной работы SSL.
EDIT: похоже, это было сделано в этомсовершить:
core, mod_ssl: Снимите ограничение, которое не позволяет mod_ssl в полной мере использовать возможности MPM событий.
Я использую Apache 2.4.6
, и изменения были опубликованы позже, в 2.4.7
.