Назад | Перейти на главную страницу

Правила Microsoft IIS с обратным прокси и статическим

У меня есть сервер IIS, который изначально размещает статический HTML в wwwroot, но затем мы решили, что если Baidu Spider попытается сканировать, мы сопоставим трафик с нашим веб-сервером NuxtJS, работающим также рядом с сервером IIS.

Итак, мы установили ARR (Маршрутизация запросов приложений), чтобы включить обратный прокси-сервер, он работает нормально, и теперь мы попытались сначала проверить, где в Правиле перезаписи URL:

Таким образом, мы ожидаем, что если обычные пользователи запросят, тогда он будет обслуживать статический HTML в wwwroot вместо этого, поскольку он не попал в правило, а вместо этого я получил 500.

ОБРАТИТЕ ВНИМАНИЕ:

Так мне нужно создать другое правило? Я ожидал, что если он не попадет в какое-либо правило, произойдет поведение по умолчанию, для которого он просто читает в wwwroot.

ОБНОВИТЬ

<?xml version="1.0" encoding="UTF-8"?>
<rules>
    <clear />
    <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="false">
        <match url="(.*)" />
        <action type="Rewrite" url="http://localhost:3000/{R:1}" />
        <conditions>
            <add input="{HTTP_USER_AGENT}" pattern="^((?Baidu).)*$" />
        </conditions>
    </rule>
    <rule name="StaticHTMLForBaiduCrawler" enabled="true" stopProcessing="false">
        <match url="(.*)" />
        <conditions>
            <add input="{HTTP_USER_AGENT}" pattern="^((?!Baidu).)*$" />
        </conditions>
        <action type="Rewrite" url="{R:1}/index.html" />
    </rule>
</rules>

Регулярное выражение в условии в вашем первом правиле не является допустимым регулярным выражением для IIS. Если вы хотите, чтобы первое правило сработало, когда пользовательский агент содержит Baidu, а второе - когда его нет, вы можете просто сделать что-то вроде ниже. Обратите внимание на отрицание в условии во втором правиле:

<?xml version="1.0" encoding="UTF-8"?>
<rules>
    <clear />
    <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="false">
        <match url="(.*)" />
        <action type="Rewrite" url="http://localhost:3000/{R:1}" />
        <conditions>
            <add input="{HTTP_USER_AGENT}" pattern="Baidu" />
        </conditions>
    </rule>
    <rule name="StaticHTMLForBaiduCrawler" enabled="true" stopProcessing="false">
        <match url="(.*)" />
        <conditions>
            <add input="{HTTP_USER_AGENT}" pattern="Baidu" negate="true" />
        </conditions>
        <action type="Rewrite" url="{R:1}/index.html" />
    </rule>
</rules>