我有许多网站使用 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/ - 不起作用
我难住了!任何人都可以提供任何帮助吗?