1

我有许多网站使用 REMOTE_ADDR 服务器变量来记录客户端 IP 以获取指标。在将这些站点的托管移动到负载平衡环境中时,我们现在只能在 REMOTE_ADDR 中获得负载平衡器 IP。我完全了解 HTTP_X_FORWARDED_FOR 的使用及其工作原理,我们确实可以访问它,我首选的解决方案是简单地更新应用程序以使用它。

但是,这里的权力希望避免必须更新所有网站:(与此同时,我正在寻找替代方案。

最终,这意味着在请求到达应用程序之前找到某种方法将 REMOTE_ADDR 替换为 HTTP_X_FORWARDED_FOR。

我正在尝试使用来自另一个 acole76 的问题的建议来使 URL Rewrite 2.0 模块工作:

IIS 7 Rewrite web.config serverVariables 指令在子文件夹中不起作用

我的 web.config 几乎和他的一样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="RemoteHostRewrite">
                    <match url="(.*)" ignoreCase="true" />
                    <serverVariables>
                        <set name="REMOTE_ADDR" value="4.3.2.1" />
                    </serverVariables>
                    <action type="Rewrite" url="{R:0}" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

我在这里使用硬编码值 4.3.2.1 进行测试。我最终将用实际值 {HTTP_X_FORWARDED_FOR} 替换它。

现在,如果 url 包含文件名,这绝对可以正常工作。如果 url 不以文件名结尾,则它不起作用。

例如:mysite.local/default.aspx - 有效

mysite.local/ - 不起作用

mysite.local/folder/default.aspx - 有效

mysite.local/folder/ - 不起作用

我难住了!任何人都可以提供任何帮助吗?

4

1 回答 1

0

你必须设置另一个规则:

    <match url="^$" />
    <action type="Rewrite" url="/default.aspx" />

或者无论您的默认页面是什么,否则“url”将为空->不使用任何规则

于 2014-02-25T13:51:17.063 回答