Я пытаюсь установить обратный прокси с помощью IIS для проксирования запроса на порте 80 к локальной виртуальной машине на порте 8080. Правило перезаписи было установкой с помощью IIS GUI "Обратное" правило Прокси. Однако это работает очень странно:
Если существует файл/папка в веб-папке (физический путь), то обратная работа прокси. Иначе это бросает 404 ошибки.
Например, для запроса на "http://example.com/myfile", если существует имя файла "myapp" в веб-папке затем, это переписывается в "http://example.com:8080/myfile" правильно. С другой стороны, если нет никакого файла "myfile" локально, то я получаю 404 ошибки. Именно, как будто существует что-то, проверяют существование локального файла (и бросают 404), прежде чем URL перепишет правила, обрабатываются.
Я пробую, отключают некоторые дескрипторы, переупорядочивают модули, и ни один, кажется, не работает :(
Рабочий IIS 7.5 на Windows Server 2008 R2
Если у вас есть приложение 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 }
);
}
}
Мне нужен был только обратный прокси для одного сервера приложений, работающего локально. Я получал 404, но затем добавил
в свой 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>
Он работал для меня, сняв runAllManagedModulesForAllRequests="true" из элемента модулей в конфигурации. Я думаю, что это приводит к тому, что все модули уровня сайтов запускаются первыми, чем достигают модуля UrlRewrite.
.