Назад | Перейти на главную страницу

ModSecurity на IIS: однопоточный?

Я установил 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.