AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1026516
Accepted
Dean Christian Armada
Dean Christian Armada
Asked: 2020-07-24 19:43:50 +0800 CST2020-07-24 19:43:50 +0800 CST 2020-07-24 19:43:50 +0800 CST

具有反向代理和静态的 Microsoft IIS 规则

  • 772

我有一个 IIS 服务器,它最初在 wwwroot 中托管静态 HTML,但后来我们决定,如果百度蜘蛛尝试爬网,我们会将流量映射到也在 IIS 服务器旁边运行的 NuxtJS Web 服务器。

因此,我们安装了 ARR(应用程序请求路由)以启用反向代理,它工作正常,现在我们首先尝试测试 URL 重写入站规则的位置:

  • 如果百度蜘蛛将请求映射到 NuxtJS 服务器(http://localhost:3000)(这是为了先测试)

因此,我们希望如果普通用户请求,那么它将在 wwwroot 中提供静态 HTML,因为它没有达到规则,而是我得到了 500。

记笔记:

  • 我正在使用 Windows 2012 和 IIS 8.5 版
  • 如果我禁用我的入站规则,那么它肯定会提供静态 HTML 文件

那么我需要创建另一个规则吗?我期待如果它没有达到任何规则,它刚刚在 wwwroot 中读取的默认行为将会发生

更新

  • 我决定为我的静态 HTML 服务创建另一个规则。下面是 IIS 生成的重写规则。我现在的问题是第二条规则不起作用。当我禁用第一条规则时,第二条规则就会起作用
<?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 iis-8.5 arr
  • 1 1 个回答
  • 516 Views

1 个回答

  • Voted
  1. Best Answer
    Jeroen
    2020-07-25T12:47:17+08:002020-07-25T12:47:17+08:00

    第一条规则中条件中的正则表达式不是 IIS 的有效正则表达式。如果您希望在用户代理包含百度时触发第一条规则,而在不包含百度时触发第二条规则,则可以执行以下操作。注意第二条规则中条件的否定:

    <?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>
    
    • 2

相关问题

  • 2003 Server企业版不能运行ASP.NET应用程序?

  • 启用集成 Windows 身份验证时,ASP(经典)在哪个帐户下运行?

  • 是否有一种简单的方法可以生成有关 IIS 中“死”文件的报告?

  • IIS 7 中的 URL 重写

  • 对于 ASP.Net 应用程序,Windows 64 位相对于 32 位的主要优势是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve