.net web.config 如何将 <rewrite> <rules> 与请求 headers 作为输入一起使用?

.net web.config how to use <rewrite> <rules> with request headers as input?

我们在 web.config 中有一些逻辑需要 ip 白名单才能访问我们的网站。

我们希望无需将 IP 列入白名单即可进行负载测试,因为负载测试将来自动态 IP。在负载测试工具中我们可以设置一个请求header,比如

  loadtester: true

在重写规则中是“输入”变量,从例子来看,包括:

  1. REMOTE_ADDR
  2. HTTP_X_Forwarded_For
  3. HTTP_HOST
  4. REQUEST_FILENAME
  5. SERVER_PORT
  6. URL
  7. REQUEST_URI

但是我找不到一个满足 header 要求的。这些记录在任何地方吗?

知道如何解析 header 并检查我要找的那个吗?我们希望允许具有特定 header 的流量,即使该 IP 未列入白名单。

示例摘自 web.config:

    <rule name="Whitelist sites" stopProcessing="true">
      <match url=".*" />
      <conditions>
        <add input="{REMOTE_ADDR}" pattern="82\.7\.151\.45" negate="true"/>
        <add input="{HTTP_X_Forwarded_For}" pattern="82\.7\.151\.45" negate="true"/>
      </conditions>
      <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="The requested site is not accessible" />
    </rule>
  </rules>
</rewrite>
</system.webServer>

更新:我找到了这个资源:https://www.w3schools.com/ASP/coll_servervariables.asp

里面有个变量叫"HTTP_<HeaderName>"我试试!

您可以访问 headers,方法是在他们的名字前加上 HEADER_

未经测试,但这应该有效:<add input="{HEADER_LOADTESTER}" pattern="true" negate="true"/>

(如果您使用这种方法来保护可公开访问的服务,我个人会为 header/value 使用随机字符串)