Я пытаюсь настроить обратный прокси-сервер с помощью IIS для запроса прокси-сервера через порт 80 на локальную виртуальную машину через порт 8080. Правило перезаписи было настроено с использованием правила «обратного прокси» графического интерфейса IIS. Однако это работает очень странно:
Если в веб-папке (физический путь) есть файл / папка, то обратный прокси работает. В противном случае выдается ошибка 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 }
);
}
}
Хорошо, я наконец-то заставил его работать, удалив с сайта IsapiFilterModule и IsapiModule.
У меня это сработало, сняв runAllManagedModulesForAllRequests = "true" из элемента modules в конфигурации. Я думаю, что это заставляет сначала запускать все модули уровня сайта, чем достигать модуля UrlRewrite.
Мне нужен был только обратный прокси для одного сервера приложений, работающего локально. Я получал 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>