是否可以使用IIS反向代理指定(伪造)用户代理?

时间:2013-08-06 14:51:57

标签: .net iis user-agent reverse-proxy

我有一个在IIS中使用反向代理设置的网站。 server1上的主站点向server2发送“folder”请求。这是按预期工作的,有一个奇怪的例外:

server2上的应用程序已经过时了。它使用的是.NET Framework 1.1中的代码和一些第三方控件,这些控件由于显而易见的原因不再受支持。

在IE(任何版本)中浏览server1 /文件夹时,可能会发生随机事件,并且会定期得到404错误。在Chrome浏览网站时,工作正常。如果我告诉IE使用Chrome用户代理,它的行为也正常。

我认为正在发生的是其中一个控件正在查看用户代理并使用它执行某些操作并且使用现代IE而不是反向代理。 (在反向代理之前,它在IE中工作)。据我所知,server2上的配置与移动到代理之前的配置相同。

那么,在将请求从server1传递到server2时,有没有办法伪造,欺骗或以其他方式操纵用户代理?

1 个答案:

答案 0 :(得分:1)

解决方案很简单。

在IIS中的URL重写配置中,右侧列中的“查看服务器变量...”。单击“添加”并输入服务器变量的名称 - 在本例中为HTTP_USER_AGENT。

这将允许您在路由过程中使用和/或修改此特定服务器变量。这是我错过了之前或者之前犯过的一步。据我所知,这不能在web.config文件中完成。我确信有一个命令行来做,但我不知道。

将HTTP_USER_AGENT添加到允许的服务器变量列表后,只需通过IIS或Web.config文件设置,即可将所需的值添加到服务器变量部分。

<rule name="..." enabled="true" stopProcessing="true">
  <match url="[pattern]" />
  <action type="Rewrite" url="[destination]/{R:1}" />
  <serverVariables>
    <set name="HTTP_USER_AGENT" value="[desired value]" />
  </serverVariables>
</rule>

在我发现你必须“允许”使用服务器变量之后很简单。