Redirect Response всегда перенаправляет на один и тот же домен - PullRequest
0 голосов
/ 17 декабря 2018

Я пишу набор веб-приложений 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 с правилом перезаписи, опубликованным выше), вот что происходит вместо этого:

The response redirects to an URL that is not outside my app's domain, covered in blue here, rather than to www.google.com as it should.

В чем причина этого?

1 Ответ

0 голосов
/ 17 декабря 2018

Я нашел решение сам.Это была действительно проблема с обратным прокси.

IIS имеет возможность переписать хост в заголовках ответов.Решение описано в этом ответе (в других ответах на этот же вопрос есть дополнения, если ваша версия IIS или Windows Server не указана).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...