Обратный прокси-сервер IIS для порта Dynamic c для веб-сокетов - PullRequest
0 голосов
/ 15 января 2020

Как вы можете видеть ниже, у меня есть 2 правила, которые в основном делают то же самое для серверов веб-сокетов. Есть ли возможность объединить эти 2 правила в одно общее правило c, которое в то же время позволило бы добавить больше серверов веб-сокетов без добавления большего количества правил. Что-то вроде "wss: //somerandomdomain.net: {PORT} (. *)" => "http://localhost: {PORT} / {R: 1}"?

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8080/(.*)" />
                    <action type="Rewrite" value="http{R:1}://www.videolounge.net/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
            <rules>
                <rule name="Web Socket Reverse" enabled="true" stopProcessing="true">
                    <match url="wss://somerandomdomain.net:35000(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    </conditions>
                    <action type="Rewrite" url="http://localhost:35000/{R:1}" />
                </rule>
                <rule name="Web Socket Reverse 2" enabled="true" stopProcessing="true">
                    <match url="wss://somerandomdomain.net:35001(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    </conditions>
                    <action type="Rewrite" url="http://localhost:35001/{R:1}" />
                </rule>
                <rule name="Redirect to https" stopProcessing="true">
            <match url=".*" />
            <conditions>
                <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
        </rule>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8080/{R:1}" />
                </rule>
            </rules>
        </rewrite>
        <urlCompression doStaticCompression="false" doDynamicCompression="false" />
    </system.webServer>
</configuration>

1 Ответ

0 голосов
/ 16 января 2020

Я думаю, <match url="wss://somerandomdomain.net:35001(.*)" /> не будет работать, потому что этот параметр никогда не содержит полный URL. Это просто покрывает часть URI запроса.

Я думаю, вы могли бы вместо этого попробовать переменную {CACHE_URL}. Это правило соответствует вашему требованию? У меня нет образца веб-розетки для тестирования. Поэтому я просто пишу это правило на основе ваших требований.

  <rule name="1" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://localhost{C:1}/{C:3}" />
                <conditions>
                    <add input="{CACHE_URL}" pattern="wss://somerandomdomain.net(:([0-9]+))?/(.*)" />
                </conditions>
            </rule>
...