Server 2012 URL 重写模块 2 总是出现 404

Server 2012 URL 重写模块 2 总是出现 404

URL 重写在 Windows Server 2008 上运行良好,但在 Server 2012 上使用相同配置时出现 404 错误

    <rewrite>
        <outboundRules>
            <rule name="persist example.org" preCondition="ResponseIsHtml1" enabled="false">
                <match filterByTags="A, Form, Img" pattern="^http(s)?://10.10.10.3:8000/(.*)" />
                <action type="Rewrite" value="http{R:1}://example.org/{R:2}" />
            </rule>
            <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                <match filterByTags="A, Form, Img" pattern="^http(s)?://10.10.10.3:8080/(.*)" />
                <action type="Rewrite" value="http{R:1}://example.org/{R:2}" />
            </rule>
            <preConditions>
                <preCondition name="ResponseIsHtml1">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>
        </outboundRules>
        <rules>
            <rule name="RequestBlockingRule1" patternSyntax="ECMAScript" stopProcessing="true">
                <match url="prefs?.*" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                </conditions>
                <action type="AbortRequest" />
            </rule>
            <rule name="block EDITING of example.org/library/sections" enabled="true" stopProcessing="true">
                <match url="^\/*library\/*sections" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{REQUEST_METHOD}" pattern="^DELETE$" />
                    <add input="{HTTP_HOST}" pattern="^example\.org$" />
                </conditions>
                <action type="AbortRequest" />
            </rule>
            <rule name="block browsing API on example.org" enabled="true" stopProcessing="true">
                <match url="^\/*services\/*browse" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{HTTP_HOST}" pattern="^example\.org$" />
                </conditions>
                <action type="AbortRequest" />
            </rule>
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                <action type="Rewrite" url="http://10.10.10.3:8080/{R:1}" />
            </rule>
        </rules>
    </rewrite>

在 Server 2012 上,我使用默认的 IIS 8.5 服务器角色,安装了 URL 重写模块 2,其他所有设置均保留默认设置。我尝试在 2012 服务器上通过 IIS 8.5 手动重新创建规则。我尝试将应用程序池管理管道模式设置为“经典”。导航到“example.org”或本地 IP 等效项时,我总是得到“404 - 未找到文件或目录”。我打算放弃,继续使用 Server 2008。有什么建议吗?

答案1

搞清楚,我没有意识到 GUI 更新:c:\Windows\System32\inetsrv\config\applicationHost.config

一旦我在 Win2012 机器上将以下内容添加到该文件中,它就开始按预期工作。

<system.webServer>
    <proxy enabled="true" />
</system.webServer>

我真傻,我以为到外部主机的入站重写规则意味着需要反向代理,IIS 管理器至少应该在代理被禁用时警告用户 - 我在 GUI 中的任何地方都找不到此设置。

相关内容