Ich kann Reverse-Proxy in IIS 8.5 für meine MVC5-Anwendung nicht ordnungsgemäß konfigurieren. Wir verwenden die Drittanbieter-Anwendung Tibco Spotfire WebPlayer 7.0.1, um sie in unsere MVC-Webapp zu integrieren. Dazu verwenden wir die JavaScript-API, um den Bericht von WebPlayer zu öffnen und ihn in iframe einzufügen.IIS-Reverse-Proxy-Konfigurationsprobleme mit MVC 5 App
Wir müssen Reverse-Proxy konfigurieren, damit Anfragen an Backend-Server mit installiertem WebPlayer gesendet werden können. Unser Haupt Webapp bei http://mywebapp.com/
und alle Anfragen gelegen, die Rewrite sieht aus wie http://mywebapp.com/SpotfireWeb/...
, Back-End-Server auf private IP-http://172.29.1.7/SpotfireWeb/...
Das Hauptproblem liegt sein sollte, dass ich Reverse-Proxy 3.0 und URL Rewrite-Modul ARR 2.0 mit konfiguriert, aber es doesn‘ t arbeiten für * .ashx, * .aspx, * .axd, * .asmx-Dateien. Es sieht aus wie einige Handler Konflikte mit ARR/RewriteModule und erlaubt keine Anfragen an andere Server
Einzelheiten weitergeben müssen:
Wenn ich wie http://mywebapp.com/SpotfireWeb/secret.html
statische HTML-Datei zu laden versuchen, die Anforderung gewesen rewrote zu 172.29.1.7
Server und ich habe Inhalt dieser Datei. Aber sobald ich etwas wie http://mywebapp.com/SpotfireWeb/GetJavaScriptApi.ashx?Version=6.0
anfordern, habe ich 404
Fehler von mywebapp.com bekommen. Ich laufe Wireshark und entdeckte, dass Anfragen an Back-End-Server 172.29.1.7
überhaupt nicht gehen, wenn Anfragen * .ashx-Datei enthält. Ich installierte Failed Requests Trace
und fand dieses Ereignis HANDLER_CHANGED
aufgetreten, die ApplicationRequestRoutingHandler
-System.Web.Mvc.MvcHandler
geändert
mit diesem Spiel ich einige Handler entfernt und jetzt fängt Wireshark-Anforderungen an den Back-End-Server. Ich glaube, dass dieser Ansatz des Entfernens von Handlern nicht korrekt ist. Kann ich etwas falsch konfiguriert sein?
Wie dem auch sei, das Entfernen eines Moduls von einem stand ich Problem, wenn POST-Anforderung an http://mywebapp.com/SpotfireWeb/AjaxService.asmx/InitiateOpen
nicht verarbeitet hat, und ich bekam 404 Fehler von meiner ersten App. Wenn ich * .asmx-Handler entfernte, bekam ich noch den gleichen Fehler. Das ist der Punkt, an dem ich gerade feststecke.
Meine Regeln für das Umschreiben von web.config von mywebapp.com. Ich konfigurierte es auf Website-Ebene:
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="SpotfireWeb/?(.*)$" />
<action type="Rewrite" url="http://172.29.1.7/SpotfireWeb/{R:1}" logRewrittenUrl="true" />
<serverVariables>
<set name="ORIGINAL_HOST" value="{HTTP_HOST}" />
</serverVariables>
</rule>
</rules>
<outboundRules>
<clear />
<rule name="ReverseProxyOutboundRule1" preCondition="" enabled="true">
<match filterByTags="A, Area, Base, Form, IFrame, Img, Input, Link, Script" pattern="SpotfireWeb/?(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
<action type="Rewrite" value="http://mywebapp.com/SpotfireWeb/{R:1}" />
</rule>
<rule name="ReverseProxy_Redirection" preCondition="IsRedirection" enabled="true">
<match filterByTags="A, Area, Base, Form, IFrame, Img, Input, Link, Script" serverVariable="RESPONSE_Location" pattern="^http://[^/]+/(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{ORIGINAL_HOST}" pattern=".+" />
<add input="{URL}" pattern="^/(SpotfireWeb)/?.*" />
</conditions>
<action type="Rewrite" value="http://{ORIGINAL_HOST}/{C:1}/{R:1}" />
</rule>
<preConditions>
<preCondition name="IsRedirection">
<add input="{RESPONSE_STATUS}" pattern="3\d\d" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
Hat jemand etwas ähnliches gesehen? Ich nehme an, dass die Ursache im MVC-Handler, aber nicht verstehen, wo.