У меня есть одна служба windows, которая выполняет какое-то приложение с конечной точкой REST на локальном хосте: 5001 / api / ... Поэтому я установил IIS 10 с модулем перезаписи, чтобы создать обратный прокси-сервер для HTTPS для этой службы. Это сработало замечательно.
Теперь я хочу использовать тот же сайт IIS для размещения сайта, который должен использовать этот сервис по тому же URL. Поэтому я попытался изменить шаблон моего URL для перезаписи iis на «api /(.*)», поэтому он должен просто прокси-запросы / api. Тестирование шаблона - это именно то, что я хочу: просмотр соответствий server.domain / api / function и перезапись выполнены, а server.domain не переписан. Но теперь просмотр server.domain будет часто возвращать «Ошибка HTTP 500.52 - Ошибка модуля перезаписи URL». Иногда загрузка страницы работает отлично. Но после перезагрузки я снова получу эту ошибку.
Мой web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="true">
<match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:5001/(.*)" />
<action type="Rewrite" value="https://server.domain/{R:2}" />
</rule>
<rule name="ReverseProxyOutboundRule2" preCondition="ResponseIsHtml1" enabled="true">
<match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:5001/(.*)" />
<action type="Rewrite" value="https://server.domain/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
<rules>
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="api/(.*)" />
<action type="Rewrite" url="http://localhost:5001/{R:0}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
<httpErrors errorMode="Detailed" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS, DELETE, PUT" />
<add name="Access-Control-Max-Age" value="1000" />
<add name="Access-Control-Allow-Headers" value="x-requested-with, Content-Type, origin, authorization, accept, client-security-token" />
</customHeaders>
</httpProtocol>
<urlCompression doDynamicCompression="false" />
</system.webServer>
</configuration>
Я понятия не имею, почему существуют два исходящих правила. IIS создал их автоматически, когда я решил создать правила обратного прокси.
Если я отключу сжатие содержимого stati c, все будет работать без проблем. Dynami c модуль сжатия не установлен .
Итак, у меня несколько вопросов: - почему я получаю ошибку «Перезаписать URL» для страниц, которые не следует переписывать, а переписанные будут работать без проблем - почему сжатие stati c создает URL перезаписи ошибки - как мне настроить IIS для сжатия и работы с перезаписью (я проверил порядок модулей и модуль сжатия stati c находится над модулем перезаписи).
Best, Robin