Я пишу набор веб-приложений ASP.NET Core, которые иногда приходится перенаправлять друг на друга.При локальном тестировании все отлично работает.Однако, когда я публикую их на нашем промежуточном сервере, перенаправления всегда «остаются» на одном хосте.Например, если я на http://app1.test/
и перенаправляю на http://app2.test/somepath
, то, что я на самом деле получаю в заголовке HTTP Location
i http://app1.test/somepath
: любой указанный мной URL преобразуется, так что он «остается» в текущем имени хоста,
Однако этого не происходит локально.Я развернул приложения в виде процессов Kestrel, и они выставляются через IIS, работая в качестве обратного прокси-сервера.Может ли это быть причиной?Что я должен сделать, чтобы решить проблему?
ОБНОВЛЕНИЕ
Вот полный web.config для обратного прокси-сервера app1.test
:
<?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>
Файл web.config
app2.test
практически одинаков (за исключением, конечно, номеров портов).
ОБНОВЛЕНИЕ 2
Я постараюсь объяснить лучше.Я заметил, что целевой сайт на самом деле не имеет значения, поэтому я сделаю все проще: в моем приложении есть действие, которое я хочу перенаправить в Google.Это действие в контроллере Home
:
public IActionResult ToGoogle()
{
return Redirect("https://www.google.com?q=Hi");
}
Если я запускаю веб-приложение локально и запрашиваю http://localhost:1234/Home/ToGoogle
, все в порядке: ответ 302 Найдено, с правильным URL (www.google.com и т. д.) в заголовке Location
.
Как только я опубликую приложение на промежуточном сервере (приложение Kestrel на порту 5000, за обратным прокси-сервером IIS с правилом перезаписи, опубликованным выше), вот что происходит вместо этого:
В чем причина этого?