2016-03-30 19 views
0

MVC5アプリケーション用のIIS 8.5でリバースプロキシを正しく設定できません。我々は、サードパーティ製のアプリケーションTibco Spotfire WebPlayer 7.0.1を使用して、MVC webappに統合します。これを行うには、Javascript APIを使用してWebPlayerからレポートを開き、iframeに挿入します。MVC 5アプリケーションのIISリバースプロキシ設定の問題

WebPlayerがインストールされているバックエンドサーバーにリクエストを送信できるようにリバースプロキシを設定する必要があります。私たちの主なhttp://mywebapp.com/に位置webappの書き換えである必要があり、すべての要求http://mywebapp.com/SpotfireWeb/...のように見え、プライベートIPにあるバックエンドサーバhttp://172.29.1.7/SpotfireWeb/...

私はARR 3.0とURL書き換えモジュール2.0を使用してリバースプロキシを設定し、それが」doesnの主な問題* .ashx、* .aspx、* .axd、* .asmxファイルで動作します。これは、ARR/RewriteModuleといくつかのハンドラの競合のように見えますし、別のサーバーに

詳細を要求を渡すことはできません:

私はhttp://mywebapp.com/SpotfireWeb/secret.html要求のような静的なhtmlファイルをロードしようとするに書き直してきています172.29.1.7サーバーと私はこのファイルの内容を得ました。しかし、一度私がhttp://mywebapp.com/SpotfireWeb/GetJavaScriptApi.ashx?Version=6.0のようなものを要求すると、私は404のエラーをmywebapp.comから得ました。私はWiresharkを実行し、バックエンドサーバ172.29.1.7へのリクエストがリクエストに* .ashxファイルが含まれていてもまったく動かないことを発見しました。 私はFailed Requests Traceをインストールし、私はいくつかのハンドラを削除このと遊ぶSystem.Web.Mvc.MvcHandler Failed Requests Trace

ApplicationRequestRoutingHandlerを変更HANDLER_CHANGEDが発生し、そのイベントを発見し、今Wiresharkのは、バックエンドサーバーに要求をキャッチします。ハンドラを削除するというこのアプローチは正しいとは思えません。私は間違った方法で何かを構成することができますか? http://mywebapp.com/SpotfireWeb/AjaxService.asmx/InitiateOpenへのPOSTリクエストを処理していなかったと私は私の最初のアプリから404エラーを得たとき、私は問題に直面したことにより、1つのモジュールを取り外す とにかくenter image description here web.config

、。 * .asmxハンドラを削除しても、私はまだ同じエラーが発生しています。これは今私が立ち往生するポイントです。 mywebapp.comのweb.configファイルから

Trace from IE

私の書き換えルール。私はウェブサイトレベルでそれを設定しました:

 <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> 

誰かに似たものを見ましたか? 私はMVCハンドラの根本的な原因を想定していますが、どこを理解できません。

答えて

0

これを修正しました。モジュールを削除する必要はありません。基本的に答えはfailed requestsです。 MAP_REQUEST_HANDLERイベント中ASP.NETインフラストラクチャによって、現在の要求の要求ハンドラが決定されます。私の場合、MVCハンドラはARRに関係なく/SpotfireWeb/...のようなURLを要求するたびに選択されていますが、現在のハンドラです。 Here私がことがわかった:

..theハンドラマッピングがMAP_REQUEST_HANDLERイベントで要求の実行中に変更することができます。これにより、URL書き換えなどのシナリオが機能します。

私の修正ではMVCルートからSpotfireWebが完全に削除されました。したがって、私はRouteConfig.cs

routes.IgnoreRoute("SpotfireWeb/{*pathInfo}"); 

に次のコードを追加し、クラス全体は次のようになります。

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     // ignore everything under 'SpotfireWeb' because this request will be routed 
     // to separate server via reverse proxy ARR/Rewrite module 
     routes.IgnoreRoute("SpotfireWeb/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { area = string.Empty, controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new[] { "GKSPortal.Controllers" }); 
    } 
} 
関連する問題