У меня есть обратный прокси-сервер в нашей демилитаризованной зоне, который переводит запросы wss в https (по крайней мере, из того, что я вижу в журналах IIS). То есть JavaScript делает запрос через веб-сокет к
wss://cname.domain.com
И обратный прокси отправляет его на
https://theserver.local
IIS работает на «сервере» и имеет привязку https. ARR установлен и имеет следующие настроенные правила перезаписи:
<rule name="Rewrite ssl to non-ssl" stopProcessing="true">
<condition logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{CACHE_URL}" pattern="^(.+):// />
</condition>
<match url="the_app/(.*)" />
<action type="Rewrite" url="{MapProtocol:{C:1}}://theserver.local:8080/{R:1}" />
</rule>
<rewriteMap name="MapProtocol">
<add key="https" value="http" />
<add key="wss" value="ws" />
<rewriteMap>
Это должно направлять входящие запросы https и wss по пути /the_app на http://theserver:8080/{path_and_query_string} и ws://theserver:8080/{path_and_query_string} соответственно.
У меня также есть следующая настройка перезаписи (с наивысшим приоритетом) для обработки этих запросов wss, которые приходят через https (поскольку я могу сказать, какие они основаны на пути):
<rule name="Rewrite https to ws" stopProcessing="true">
<match url="the_app/websockets/(%7B.+%7D)" />
<action type="Rewrite" url="ws://theserver:8080/websockets/{R:1}" />
</rule>
перезапись работает отлично... однако IIS выдает ошибку 502.2, пытаясь перенаправить запрос веб-сокетов с https на ws (неверный шлюз). Я включил отслеживание неудачных запросов и не могу найти более подходящей информации.
Можно ли заставить это работать?