我有一个在一台服务器上运行的Web应用程序,并在另一台服务器上使用带有rewriteURL的IIS作为反向代理。
我配置传入规则以使用Web应用程序服务器的地址重写反向代理地址。这很好。
但是,该应用程序允许用户下载一些内容并将其重定向到下载地址。现在,用户被转发到Web应用服务器的本地IP地址,而不是反向代理的公共地址。
据我所知,我需要编辑出站规则以捕捉到这一点,但我不知道怎么回事。
我按照这里的说明操作 https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/modifying-http-response-headers
我当前的重写规则看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="er-platform" stopProcessing="true">
<match url="^er-platform(.*)" />
<conditions>
<add input="{CACHE_URL}" pattern="^(https?)://" />
</conditions>
<action type="Rewrite" url="{C:1}://192.168.80.6:8443/{R:0}" />
<serverVariables>
<set name="ORIGINAL_HOST" value="{HTTP_HOST}" />
</serverVariables>
</rule>
</rules>
<outboundRules>
<rule name="er-platform" preCondition="IsRedirection" enabled="true">
<match serverVariable="RESPONSE_LOCATION" pattern="^(https?)://[^/]+/(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{ORIGINAL_HOST}" pattern=".+" />
</conditions>
<action type="Rewrite" value="{R:1}://{ORIGINAL_HOST}/{R:2}" />
</rule>
<preConditions>
<preCondition name="IsRedirection">
<add input="{RESPONSE_STATUS}" pattern="3\d\d" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
在尝试下载内容时,我仍然会被重定向到本地IP。 我如何更改规则才能做到这一点?
谢谢,
托马斯
答案 0 :(得分:1)
我认为你的出境规则不正确。我有几个猜测它失败的原因。
首先:您的入站规则必须匹配您的出站规则才能生效。这是因为在执行入站规则时会捕获ORIGINAL_HOST
。目前,您的入站规则与^er-platform(.*)
的网址匹配。我将假设由于这是一个反向代理,它正在工作,因为如果它不是,你将无法启动下载。
第二:输出规则仅在3xx代码上触发。这不是重定向的唯一方法。您可能使用JavaScript重定向。例如。 `window.location =&#39; http://wrongaddress&#39;。在这种情况下,您的出站规则将无效。
调试此操作的后续步骤: 为入站规则启用“日志记录”。 您的日志将写入%SystemDrive%\ inetpub \ logs \ LogFiles \。验证入站规则是否被命中。
验证线路上发生了什么:
Fiddler是了解网络上实际发生情况的绝佳工具。使用此选项确认URL重写规则应该命中。即请求URL与^er-platform(.*)
匹配,响应代码在300s内。
除了Fiddler,您还可以使用Chrome开发者工具网络标签。打开“保留日志”&#39;复选框,以便在您重定向后无法清除。验证您认为应该发生的实际情况。