我们使用 Microsoft 的 Web Farm Framework 在集群中配置了多个 Web 服务器。为了帮助调试,我喜欢做的一件事是在 IIS 中创建一个标头,以标识处理请求的服务器。不幸的是,当我尝试这样做时,WFF 会在所有服务器上将标头设置为相同的值。有办法解决这个问题吗?
我尝试研究使用 skipDirectives,但找不到任何相关文档(除了稍微展示如何使用它来跳过目录和绑定)。
如果有这方面的文档,请提供链接!如果我需要做其他事情,我希望能够阅读更多相关内容。
答案1
布莱恩,
实现此目的的一个示例是使用 URL Rewrite 在主 Web 服务器节点上创建响应标头,该标头会添加带有{SERVER_ADDR}
服务器变量的新标头。使用服务器变量可让您使规则尽可能通用,这样您就不需要让 WFF 跳过配置文件的任何部分。
此类响应标头的 web.config 条目将是:
<outboundRules>
<rule name="Add Server Node to Response">
<match serverVariable="RESPONSE_Node" pattern="(.*)" />
<action type="Rewrite" value="{SERVER_ADDR}" />
</rule>
</outboundRules>
此规则将把 Web 服务器的 IP 地址放在名为 的响应标头中Node
。这可能会导致一些您不想披露的信息泄露。因此,您还可以使用重写映射将不同的服务器 IP 映射到唯一标识它们的名称,例如“Node1”。
您可以在以下位置找到有关设置响应标头的更多信息http://www.iis.net/learn/extensions/url-rewrite-module/modifying-http-response-headers。
编辑:
要将服务器变量映射SERVER_ADDR
到您提供的名称,您需要在 web.config 中执行以下操作...
<rewrite>
<outboundRules>
<rule name="Add Server Node to Response">
<match serverVariable="RESPONSE_Node" pattern="(.*)" />
<action type="Rewrite" value="{NodeMappings:{SERVER_ADDR}}" />
</rule>
</outboundRules>
<rewriteMaps>
<rewriteMap name="NodeMappings">
<add key="10.0.0.1" value="Node1" />
<add key="10.0.0.2" value="Node2" />
</rewriteMap>
</rewriteMaps>
</rewrite>
请记住,每次节点 IP 发生变化或将节点添加到场时,这都要求您更新此部分。