在web.config位置中的IIS动态IP限制

10

我正在尝试使用IIS动态IP限制来限制来自同一IP的请求。我已经启用了模块,如果我从IIS UI编辑动态限制设置,则请求会被很好地限制。这很好,但是我需要在不同的URL上有不同的速率。例如,登录应该比静态资源更严格。我正在尝试使用web.config中的locations来实现这一点。

<configuration>
  <location path="foo">
  <system.webServer>   
    <security>     
      <dynamicIpSecurity enableLoggingOnlyMode="true">       
         <denyByRequestRate enabled="true" maxRequests="1" 
            requestIntervalInMilliseconds="5000" />
      </dynamicIpSecurity>
   </security>  
  </system.webServer> 
  </location>
</configuration>

不幸的是,这并不适用。我相当确定这与我的应用程序无关,因为它在一个只有一个HTML文件的静态网站上也无法工作。我也很确定位置路径是正确的,因为如果我添加...<deny users="*" />,请求将被阻止。


2
你尝试把 enableLoggingOnlyMode 设置为 false 了吗?根据此页面,当其设置为 true 时,请求实际上并不会被阻止。 - user1429080
谢谢,是的,我已经尝试了true、false以及没有属性的情况。不幸的是,这对限流没有影响。 - Jan Blaha
1个回答

5

这是不可能的。从模块描述中可以看出:

此模块可配置为在 Web 服务器或 Web 站点级别执行分析和阻止。

内部实现为 HttpModule(本地 HttpModule)。HttpModule 对每个请求都会运行 - 不受位置影响。有关参考,请查看排除某些页面使用 HTTPModule

因此,如果您需要支持此精确模块,则唯一的其他选择是将站点组织为几个迷你应用程序。

例如:

/ -> 根 Web 应用程序

/Content -> 具有静态内容的 Web 应用程序

/Login -> 具有登录功能的 Web 应用程序

并在每个迷你应用程序中创建具有适当规则的 web.config 文件。


谢谢。我希望针对特定的REST服务方法有具体的规则,所以小型应用程序对我来说不是选项。我将不得不使用不同的应用程序级限流模块...如果明天没有其他问题出现,我会接受这个答案。 - Jan Blaha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接