IIS URL 重写故障排除

IIS URL 重写故障排除

我正在使用 IIS 将代理 HTTP 请求反向发送到在同一台机器上运行的 nodejs 应用程序。

已安装 URL 重写和 ARR 模块,并检查了代理设置。URL 匹配似乎不错:如果我将规则更改为重定向,它会按预期工作。使用重写时,我收到 404 错误。

API 端点是api.url.com/getContent/ofertas。IIS 站点根文件夹是W:\sites\LocalUser\site\api。以下是web.config文件。

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="UrlRewriteLocalhost" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8801/{R:1}" />
                </rule>
            </rules>
        </rewrite>
        <defaultDocument>
            <files>
                <remove value="index.htm" />
                <remove value="index.html" />
            </files>
        </defaultDocument>
    </system.webServer>
</configuration>

我确信过去我在另一台机器上也使用过类似的设置和类似的web.config文件。我过去使用 procmon 解决过问题(主要是关于 FTP),以下是我的发现:

Procmon 屏幕截图

这些是我使用重写与重定向规则访问 URL 时的 procmon 日志。请注意,在重定向规则中,文件web.config在正确的路径中解析(红色箭头)。使用重写规则似乎无法将其解析为正确的路径。

重写规则出现 404 错误

此外,如果我正确理解了错误描述,它似乎是找不到合适的文件处理程序,因为没有设置。此外,通过查看“PhysicalPath”,它似乎请求了错误的路径,procmon 日志支持这一点是有道理的。

我读到过,URL 重写发生在处理程序映射情况之前,这是否意味着 URL 重写无法正常工作?我下一步该怎么做?

答案1

我发誓这个问题已经困扰我一个多星期了。发布问题后,我又把所有事情都检查了一遍,检查了所有可能的 IIS 功能。

让我感到不爽的是,我知道 URL 重定向通过重定向规则可以正常工作,但需要 ARR 才能正常工作的重写却不行。

在检查“模块”功能时,我注意到 URL 重写模块有一个条目RewriteModule,但没有建议 ARR。我转到“操作”->“配置本机模块...”,那里有ApplicationRequestRouting等待勾选的模块...

我也关注了Microsoft 文章并执行了步骤 3。我认为这不是解决方案的一部分,但我认为值得一提。

我希望这可以帮助别人!

相关内容