Ошибка HTTP 401 только при использовании прокси-сервера IIS ARR - PullRequest
0 голосов
/ 28 сентября 2019

Приложение, содержащее веб-интерфейс, работает в системе Windows Server 2019 с установленными IIS 10 и ARR.При переходе на веб-страницу с использованием IP: порт загружается правильно.При переходе на веб-страницу с использованием domain.com на веб-сайте имеется некоторое содержимое, отображающее ошибку 401 в консоли, и страница загружается неправильно.

Chrome Console

При переходе к домену запрос проходит через IIS и URL Rewrite.Казалось бы, есть некоторая проблема с передачей информации через прокси.

Это код правила перезаписи в IIS:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:33337/{R:1}" />
                <serverVariables>
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                </serverVariables>
                </rule>
            </rules>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:33337\/?(.*)" />
                    <action type="Rewrite" value="http{R:1}://sub.domain.com/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
        <urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />
    </system.webServer>
</configuration>

Это ссылка на проблему GitHub.для этой конкретной проблемы: https://github.com/qbittorrent/qBittorrent/issues/11207

1 Ответ

1 голос
/ 29 сентября 2019

Я воспроизвел проблему.

Очевидно, qBittorrent ожидает, что клиенты отправят заголовки Referer того же происхождения.В вашем случае это должно быть localhost:33337, но, очевидно, отправляется sub.domain.com.

Эта мера безопасности активируется настройкой Enable Cross-Site Request Forgery (CSRF) protection, которая может быть достигнута через qBitorrent > Options > Web UI > Security.

Выесть два варианта решения.

  • Отключить настройку.
  • Перезаписать заголовок Referer соответствующим значением.

Если вы хотитеперепишите заголовок, после разрешения серверных переменных HTTP_REFERER и HTTP_ORIGIN, как вы сделали для HTTP_ACCEPT_ENCODING, вы должны изменить свои правила следующим образом.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:33337/{R:1}" />                    

                    <!-- New Optional Condition -->
                    <conditions logicalGrouping="MatchAny">
                        <add input="{HTTP_REFERER}" pattern="^(?:https?://[^/]*/(.*))?$" />
                    </conditions>

                    <serverVariables>
                        <set name="HTTP_ACCEPT_ENCODING" value="" />

                        <!-- New Header Rewrite -->
                        <set name="HTTP_REFERER" value="http://localhost:33337/{C:1}" />

                        <!-- Remove Origin Header -->
                        <set name="HTTP_ORIGIN" value="" />
                    </serverVariables>
                </rule>
            </rules>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:33337\/?(.*)" />
                    <action type="Rewrite" value="http{R:1}://sub.domain.com/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
        <urlCompression doStaticCompression="false" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />
    </system.webServer>
</configuration>

Кстати, учтите, что qBittorrent предупреждает вас опроблема.Не забудьте проверить вкладку «Журнал выполнения».

qBittorrent Execution Log

...