【发布时间】:2019-05-17 16:44:33
【问题描述】:
我正在编写一套 ASP.NET Core Web 应用程序,这些应用程序有时必须相互重定向。在本地测试时,一切正常。但是,当我在我们的登台服务器上发布它们时,重定向总是“停留”在同一个主机上。例如,如果我在http://app1.test/ 上并重定向到http://app2.test/somepath,我实际上在Location HTTP 标头i http://app1.test/somepath 中得到了什么:我指定的任何URL 都会被转换,以便它“保留”在当前主机名中.
但是,这不会在本地发生。我已将应用程序部署为 Kestrel 进程,并且它们通过 IIS 公开,用作反向代理。这可能是原因吗?我应该怎么做才能解决这个问题?
更新
这是app1.test的反向代理的完整web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:5000/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
<system.web>
<sessionState mode="InProc" />
<customErrors mode="RemoteOnly" />
</system.web>
</configuration>
app2.test 的 web.config 几乎是相同的(当然,除了端口号)。
更新 2
我会尽力解释得更好。我注意到目标站点并不重要,所以我会让事情变得更简单:我的应用程序中有一个操作,我想将用户重定向到 Google。这是Home 控制器中的操作:
public IActionResult ToGoogle()
{
return Redirect("https://www.google.com?q=Hi");
}
如果我在本地启动网络应用程序并请求 http://localhost:1234/Home/ToGoogle,一切都很好:响应是 302 Found,Location 标头中有正确的 URL(www.google.com 等)。
一旦我将应用程序发布到临时服务器(端口 5000 上的 Kestrel 应用程序,在具有上面发布的重写规则的 IIS 反向代理后面),就会发生以下情况:
这是什么原因?
【问题讨论】:
-
听起来像是反向代理。您的配置文件中有任何
规则吗?你可以阅读更多关于它here -
@AmanB 我是这么认为的,但我不确定我做错了什么。我发布了我的应用的 web.config。
-
如果你想改变 URL .. 试试
-
@AmanB 不,这不是我想要的。甚至让访问者知道内部代理服务器是
localhost:5000也是没有意义的。相反,我需要将其重定向到 另一个 站点。 -
很遗憾,我不太清楚你的问题
标签: asp.net-core