.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
在重写规则中是“输入”变量,从例子来看,包括:
- REMOTE_ADDR
- HTTP_X_Forwarded_For
- HTTP_HOST
- REQUEST_FILENAME
- SERVER_PORT
- URL
- 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 使用随机字符串)
我们在 web.config 中有一些逻辑需要 ip 白名单才能访问我们的网站。
我们希望无需将 IP 列入白名单即可进行负载测试,因为负载测试将来自动态 IP。在负载测试工具中我们可以设置一个请求header,比如
loadtester: true
在重写规则中是“输入”变量,从例子来看,包括:
- REMOTE_ADDR
- HTTP_X_Forwarded_For
- HTTP_HOST
- REQUEST_FILENAME
- SERVER_PORT
- URL
- 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 使用随机字符串)