使用 WFF 允许不同服务器上使用不同的标头

使用 WFF 允许不同服务器上使用不同的标头

我们使用 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 发生变化或将节点添加到场时,这都要求您更新此部分。

相关内容