IIS 上的 ModSecurity:单线程吗?

IIS 上的 ModSecurity:单线程吗?

我在运行 IIS 8.5 的 Web 服务器上安装了 ModSecurity,发现响应时间增加了 15 倍(0.15 毫秒/请求 vs. 2.2 毫秒/请求),即使 SecEngine 设置为关闭。安装 ModSecurity 后,IIS 似乎在单线程模式下运行,因为 IIS 工作进程在使用 ModSecurity 时仅使用大约 15% 的 CPU,但如果不使用 ModSecurity,则最多可以使用 95% 的 CPU。

我正在使用 ModSecurity 安装的 CSR 中的 conf 文件。我是否缺少一些配置?

答案1

我通过查看以下代码确认了你的观察结果(以及我的观察结果):GitHub 上的 ModSecurity IIS 模块

我发现里面的代码CMyHttpModule::OnSendResponseCMyHttpModule::OnPostEndRequest并且CMyHttpModule::OnBeginRequest被包裹在里面

EnterCriticalSection(&m_csLock); 
...
LeaveCriticalSection(&m_csLock);

再加上的单例方法CMyHttpModuleFactory::GetHttpModule()以及的变量m_csLockCMyHttpModule在其构造函数中初始化(仅调用一次,因为它对所有请求使用相同的实例)的事实,意味着到达不同线程的所有请求都被搁置并逐一执行。

我还为此创建了一个勾选GitHub 上的 ModSecurity 项目页面上的问题

相关内容