在IIS中使用不同身份validation的不同池之间的URL重写

我有一个IIS应用程序和三个子应用程序,如下所示:

CMT (Windows and Anonymously authenticated) - CI - EM - Website (Windows authenticated) 

CI和EM是帮手Web服务,网站 – 显然是网站。 现在,如果应用程序托pipe在cmt.mycompany.com下,则用户可以访问该网站,如下所示:

cmt.mycompany.com/website/mypage

我想写一个URL Rewrite规则,这样我们的用户就不用在DNS之后写'网站',只需打开cmt.mycompany.com或者cmt.mycompany.com/mypage打开主页或者mypage,分别。

 <rule name="WebsiteMapping" stopProcessing="true"> <match url="^(?!\b(?:ci|em|website)\b).*$" /> <action type="Rewrite" url="http://{HTTP_HOST}/website/{R:0}" logRewrittenUrl="true" /> </rule> 

这条规则所做的只是简单地重写任何不以ciemwebsite开头的url,以便在DNS之后添加website

我有两个问题,我似乎无法解决:

  1. 出于某种原因,URL重写似乎无法与身份validation,所以无论何时我打cmt.mycompany.com ,我得到一个对话框要求我authentication自己,即使我input我的凭据它不起作用。 由于主应用程序(CMT)和网站托pipe在不同的应用程序池中,因此我们需要安装IIS ARR,但这并没有帮助。

  2. 我试图改变规则“redirect”,它确实工作,但还有一个问题。 所以我有一个负载平衡器连接到4个独立的盒子。 负载均衡器托pipe在端口80下,但各个盒子托pipe在端口9991.当我点击各个盒子时,URLredirect工作成功,但是当我点击负载平衡器dns时,端口9991(单个盒子)被追加到负载均衡器的DNS! 例如,如果我点击了cmt.mycompany.com/mypage ,我会被redirect到cmt.mycompany.com:9991/website/mypage ,这显然是无效的,因为负载平衡器托pipe在端口号80而不是9991。

任何想法来帮助我解决这些问题?

谢谢!

我可以看到两种可能性,NTLM不支持URL重写+ ARR。 对于Windows集成身份validation,您可能必须configurationKerberos以使其正常工作。

以下是描述sharepoint的一般步骤的页面,但它适用于其他地方: http : //blogs.msdn.com/b/echarran/archive/2010/02/11/howto-configure-sharepoint-2010-for-kerberos.aspx

从本文的深入探讨,您必须为Web应用程序创build服务主体名称,并将控制委托给Web应用程序标识。 要创buildSPN,请使用如下所示的命令:(HTTP同时适用于HTTP和HTTPS)

 setspn -s HTTP/[domain name of application] [domain name]\[server name hosting application] 

为每个需要validation的域设置一个SPN,并为每个服务器托pipe应用程序(如果您有Web场)。 接下来,打开活动目录并将视图设置为高级模式。 打开一个Web服务器的计算机对象。 转到委派选项卡。 将单选button更改为“信任此用户以委托指定的服务”,请确保下一个单选button是“使用任何身份validation协议”。 点击添加。 search应用程序池标识(如果是networking服务,则不必担心此部分)。 点击确定。 在添加服务上,select这个应用程序池标识所负责的全部,然后单击确定。


或者,在根上创build一个默认页面,将stream量redirect到适当的位置可能会更容易,如下所示:

 Response.Redirect("http://" + Request.Url.ServerName + "/WebSite" + Request.Url.PathAndQuery); 

在默认站点上设置自定义错误以使用此页面。 我会做一些testing,但是你可能不得不使用引用URI的PathAndQuery将错误发送到正确的地方。