我正在尝试使用 IIS 设置反向代理,将端口 80 上的请求代理到端口 8080 上的本地虚拟机。重写规则是使用 IIS GUI“反向代理”规则设置的。但是它的工作方式非常奇怪:
如果 Web 文件夹(物理路径)中有文件/文件夹,则反向代理有效。否则,它会抛出 404 错误。
例如,对于“http://example.com/myfile“,如果在 web 文件夹中有文件名“myapp”,那么它将被重写为“http://example.com:8080/myfile“正确。另一方面,如果本地没有文件“myfile”,那么我会得到 404 错误。就好像在处理 URL 重写规则之前有一些东西会检查本地文件的存在(并抛出 404)。
我尝试禁用一些句柄,重新排序模块,但似乎都不起作用:(
在 Windows Server 2008 R2 上运行 IIS 7.5
答案1
如果您有 ASP.NET MVC 应用程序并出现 404 错误,则可以通过在路由中添加忽略路径来解决此问题。
routes.Ignore("要忽略的路径");
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Ignore("api/controllerNmae/actionName");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
答案2
对我来说,通过从配置中的模块元素中删除 runAllManagedModulesForAllRequests="true" 就可以了。我认为这会导致先运行所有站点级模块,然后再到达 UrlRewrite 模块。
答案3
好的,我最终通过从站点中删除 IsapiFilterModule 和 IsapiModule 使其正常工作。
答案4
我只需要为本地运行的一个应用服务器设置反向代理。我遇到了 404 错误,但随后将其添加<httpRedirect enabled="false" />
到站点物理目录中的 web.config 中,它就起作用了。我的 web.config 如下所示
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpRedirect enabled="false" />
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:8153/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>