Я установил ModSecurity на веб-сервер под управлением IIS 8.5 и заметил, что время отклика увеличилось в 15 раз (0,15 мс / запрос против 2,2 мс / запрос), даже если SecEngine отключен. Кажется, что IIS работает в однопоточном режиме, когда установлен ModSecurity, потому что рабочий процесс IIS использует только около 15% ЦП с ModSecurity, но он может использовать до 95% ЦП без него.
Я использую файл conf из CSR, установленного ModSecurity. Мне не хватает каких-то конфигураций?
Мне удалось подтвердить ваши (и мои) наблюдения, заглянув в код Модуль ModSecurity IIS на GitHub.
Я обнаружил, что код внутри CMyHttpModule::OnSendResponse
, CMyHttpModule::OnPostEndRequest
и CMyHttpModule::OnBeginRequest
завернут внутрь
EnterCriticalSection(&m_csLock);
...
LeaveCriticalSection(&m_csLock);
В сочетании с одноэлементным подходом CMyHttpModuleFactory::GetHttpModule()
и тот факт, что m_csLock
переменная CMyHttpModule
инициализируется только в его конструкторе (вызывается только один раз, потому что он использует один и тот же экземпляр для всех запросов), означает, что все запросы, поступающие в разные потоки, приостанавливаются и выполняются один за другим.
Я также поставил галочку для этого проблема на странице проекта ModSecurity, на GitHub.