使用HTTPS将同一个域上的子网站redirect到其他IIS

我在这个问题上看到了许多类似的问题(和答案),但似乎没有一个和我所面对的情况完全相同。 这是奇怪的,因为我不认为这是特别的,所以如果我没有足够的search,请原谅我。

无论如何。 我有两个网站是在两个IIS7,一个面向广域网和一个局域网。 面对的WAN已经只有HTTPS。 我想添加第二个网站,但在相同的HTTPS域和SSL证书,以便它成为一个子网站,如: https : //www.domain.com/subsite我怎么能做一个redirect或重写第一个IIS第二个使这个工作? 我不认为有一个标准的IISfunction可以做到这一点。 ISA服务器目前不是一个选项。 但也许另一个扩展到IIS存在?

在Apache上做了这么多次,并且正在为IIS弃用IIS。

这在IIS中可以使用受支持的插件ARR和URLrewrite。 它们作为集成工具安装在IISpipe理器GUI中。

如果你安装最新的ARR软件包,你会得到URLrewrite捆绑。 在线文档有点缺乏,但有一点修补你想要做的是可以实现的,没有太多的麻烦。

即使gui相当友好,我的build议是确保在testing时经常保存applicationHost.config,因为gui偶尔会出错。 至less在ARR v2.5中是这样的,这是我在做这个时使用的。 然后你有工作的文本configuration,你可以复制/粘贴每次你决定清理你的configuration。 这会为你节省很多时间。

在applicationHost.Config中,特别针对这些XML元素:

<rewrite> ... </rewrite> <webFarms> ... </webFarms> 

webfarms部分是您在gui中定义的内容位置的最终位置,它本质上是configuration反向代理负载平衡器,其中服务器场是到一个或多个后端节点的虚拟服务连接。 同样,重写部分是您可以从哪个场中find要从中获取内容的条件。

下面是一个实际configuration摘录,完全不符合您的使用情况,但可以作为灵感无论如何。 可能你只需要编辑第二个重写规则来匹配你的场景。 所提供的用例是用于将IIS用作到两个后端群的传递代理时,从“htmlFarm”提供dynamic内容,同时请求预定义静态内容(例如来自“imageFarm”的图像)。 select是基于URI的开始完成的。 如果URI以/ images /开头,则视为静态内容并路由到“imageFarm”,否则路由到“htmlFarm”。 在这两种情况下,IIS都将自己作为唯一的Web服务器呈现给客户端。 一个简单的健康检查也有两种不同的方式,每个农场一个。 这只是通过实验的方式,我只是把它作为剩余的噪音,尽pipe如此,可以用于你。

 <rewrite> <globalRules> <clear /> <rule name="Route all to htmlFarm" patternSyntax="ECMAScript"> <match url=".*" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_HOST}" pattern="(.*\.)?site01.com" /> </conditions> <action type="Rewrite" url="http://htmlFarm/{R:0}" /> </rule> <rule name="Route /images/* to imageFarm" stopProcessing="false"> <match url="images/.*" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> <action type="Rewrite" url="http://imageFarm/{R:0}" /> </rule> </globalRules> </rewrite> .... <webFarms> <webFarm name="htmlFarm" enabled="true"> <server address="192.168.50.77" enabled="true"> <applicationRequestRouting weight="100" /> </server> <server address="192.168.50.78" enabled="true" /> <applicationRequestRouting> <loadBalancing algorithm="WeightedRoundRobin" /> <healthCheck url="http://site01.com" responseMatch="Testing" /> </applicationRequestRouting> </webFarm> <webFarm name="imageFarm" enabled="true"> <server address="192.168.50.81" enabled="true"> <applicationRequestRouting weight="100" /> </server> <server address="192.168.50.82" enabled="true"> <applicationRequestRouting weight="100" /> </server> <applicationRequestRouting> <healthCheck url="http://site01.com/images/test.txt" responseMatch="WillTest" /> <loadBalancing algorithm="WeightedRoundRobin" /> </applicationRequestRouting> </webFarm> <applicationRequestRouting> <hostAffinityProviderList> <add name="Microsoft.Web.Arr.HostNameRoundRobin" /> <add name="Microsoft.Web.Arr.HostNameMemory" /> </hostAffinityProviderList> </applicationRequestRouting> </webFarms> 

再次,不是在你的使用情况下,但是,ARR的一个限制是,即使一个带有ARR的IIS节点可以为后端提供冗余,它本身也是单点故障。 为了克服这个问题,您需要使用两个或更多个configuration了NLB的IIS / ARR节点,或者在前面使用单独的负载平衡器。 换句话说,Web-front-as-usual 🙂

我们最终放弃了对Apache的IIS / ARR,但更多的是通过政治事故导致了办公室幽默的大爆发。 我真的不喜欢高于另一个,因为我发现它们的function和performance都非常好。 然而,在Apache中进行监控与IIS的直接比较是糟糕透顶的,我绝不希望这个评论成为任何事情的火焰。 这只是我对这个问题上其他可能有不同意见的直接经验。

祝你好运!