Рейтинг:1

IIS ARR 3.0 — изменение базового URL-адреса в теле ответа веб-API с помощью перезаписи URL-адреса

флаг vn

У меня есть локальный сервер IIS, на котором размещен веб-API Asp.net Core 3.1, работающий на порту 5000. С помощью wireguard локальный сервер подключается к общедоступному серверу. На общедоступном сервере также есть IIS 10 с включенным ARR3.0, и сайт создан как https://api.example.com. Используя IIS в качестве обратного прокси-сервера, локальный API был открыт и используется мобильным приложением.

Следующее правило перезаписи URL было записано в web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://192.168.2.79:5000/{R:1}" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="true">
                    <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://192.168.2.79:5000/(.*)" />
                    <action type="Rewrite" value="http{R:1}://api.example.com/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern=".*/.*" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

API работает отлично и возвращает все ответы. Проблема возникает, когда ответ API возвращает динамически сгенерированный URL-адрес изображения, который является правильным, если он развернут непосредственно на сервере, но за обратным прокси-сервером он возвращает локальный URL-адрес, что неверно. Я хочу переписать базовый URL-адрес в теле ответа API. Как мне это сделать?

Тестовый вызов API из Swagger Docs

Код для динамической генерации URL-адреса изображения: - Код для динамической генерации URL-адреса изображения

Пожалуйста, дайте мне знать, как я могу переписать базовый URL-адрес внутри тела ответа API?

Lex Li avatar
флаг vn
Тогда это чисто программный вопрос. Попросите разработчика узнать, как правильно использовать исходное имя хоста, а не имя после перезаписи, https://stackoverflow.com/a/53220168/11182.
AbhiAbzs avatar
флаг vn
Вовсе нет, это задача ИТ и ОП, здесь еще кто-то задавал аналогичный вопрос, но у меня это не сработало с необходимыми изменениями: https://serverfault.com/questions/508982/using-url-rewrite-to-change-part-of-url.
AbhiAbzs avatar
флаг vn
Кроме того, если мы можем переписать содержимое html и т. Д. Внутри ответа, почему бы не ответить API? https://techcommunity.microsoft.com/t5/iis-support-blog/iis-and-url-rewrite-rewriting-the-outbound-response-contents/ba-p/846351
Lex Li avatar
флаг vn
С точки зрения IT&OP, каждая функциональность/функция имеет свои ограничения, и, к сожалению, теперь вы видите ограничения исходящих правил, которые предназначены только для перезаписи простых тегов HTML (другой поток ServerFault), но не ответа JSON (ваш случай). "почему бы нет"? Потому что это действительно обязанности разработчиков.
AbhiAbzs avatar
флаг vn
Я согласен, что это невозможно, IIS может выполнить перезапись в ответе html в случае некоторых тегов, но не в другом случае. Спасибо за ваше руководство

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.