Имеем ASP.NET web приложение. Проблема в том, что приложение может выполнять как "обычные" запросы так и тяжелые запросы построения отчетов. Все запросы по умолчанию выполняются в одном Application Pool. И в случае обработки запросов на построение отчетов страдает производительность.
Задача: вынести построение отчетов в отдельный Application Pool на отдельный домен. Допустим основной сайт расположен на домене main.domain.xyz. Нам требуется все GET запросы содержащие в URL /Reports/Run обрабатывать на другом домене reports.domain.xyz.
Аутентификация
По умолчанию в нашем случае настройка следующая:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name="AUTH" />
</authentication>
Меняем на:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" name="AUTHUNIQ" enableCrossAppRedirects="true" cookieSameSite="None" domain="domain.xyz"/>
</authentication>
То есть сделали имя cookie уникальным и распространили на все поддомены нашего домена.
Machine Key
Чтобы аутентификация была валидна на обоих сайтах нужен одинаковый Machine Key. Удобнее всего настроить через IIS Manager. Заходим в раздел Machine Key и убираем галочки "Automatically generate at runtime". Получившиеся ключи должны быть одинаковы на обоих сайтах.
Редирект
В web.config:
<rewrite>
<rules>
<rule name="Reports" patternSyntax="Wildcard" stopProcessing="true">
<match url="*Reports/Run*" />
<conditions>
<add input="{HTTP_HOST}" pattern="reports.domain.xyz" negate="true" />
</conditions>
<action type="Redirect" url="https://reports.domain.xyz/{R:0}" />
</rule>
</rules>
</rewrite>
Итого
Все тяжелые запросы вынесли в отдельный сайт. Который может быть расположен на отдельных ресурсах. Пользователь больше не может создать большую нагрузку на основном сайте путем выполнения тяжелых запросов на построение отчетов. Способ не универсальный, подойдет не для любого приложения.