我尝试在单个Azure WebApp中托管多个网站,而不是每个托管网站的多个网络应用程序。这些站点中的每一个都相当小,但为了满足SLA与Azure的要求,我们需要让服务器针对我们的生产环境使用多个实例进行扩展,这是组合站点的原因。
在研究了这个主题之后,我使用Azure帐户进行了以下设置。
此时,两个Web应用程序都正常运行,两个子域都指向我们的Azure实例。我们现在有以下设置:
我想要实现的目标:
然而,我无法弄清楚的是如何将子域映射到特定的虚拟目录。我曾尝试将站点URL更新为我希望应用程序响应的子域,但是,子域仍会显示我在WebApp部署的根目录中所拥有的内容。
我是否应该拥有一些位于站点根目录中的HttpHandler并将流量引导到正确的虚拟目录?我缺少门户网站中的设置吗?以前,我们使用Web角色和修补ServiceDefinition
文件来完成此操作,但Azure Web Apps在发布,与源代码控制集成等方面的工具集似乎更进一步。
答案 0 :(得分:14)
RuslanY发布的答案将有效(稍微修改一下规则)但是,在了解了更多Azure门户和Web App配置之后,不需要在单个Web App中托管多个站点(技术上多个)所有共享您定义的资源计划的Web应用程序,例如标准级别0(S0)的2个实例)*。
截至今天的Azure服务产品,以下情况属实。当您创建新的Web应用程序时,您可以实现应用程序所属的“应用程序服务计划”。如果您有应用服务计划,可以说标准有2个实例,您部署到该应用服务计划的任何Web应用程序与同一服务计划中的其他Web应用程序共享这些资源,这意味着您无需支付额外费用来托管其他网络app 如果它位于相同的App Service计划中。我假设每个Web应用程序都是它自己的一组资源(它可以是,但不一定是)。鉴于此,为了实现我的需要,我只需为每个子域创建一个Web应用程序,并将它们全部放入相同的App Service计划中。我现在正在托管多个站点,不为每个站点支付2台服务器(我想避免的),而且我不必使用URL重写或HTTP处理程序。
我希望这篇文章可以帮助其他人更好地理解Azure Web Apps的结构。根据我的说法,目前的在线文档并没有明确说明这一点。
答案 1 :(得分:5)
这可能与URL重写规则有关,该规则获取请求的主机名并重写请求URL以从主机名中提取的子域开始:
<system.webServer>
<rewrite>
<rules>
<rule name="Rewrite Subdomain To Directory">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.mydomain\.com$" negate="true" />
<add input="{HTTP_HOST}" pattern="^(.+)\.mydomain.\com$" />
</conditions>
<action type="Rewrite" url="{C:1}/{R:0}" />
</rule>
</rules>
</rewrite>
</system.webServer>
要了解重写规则的语法,您可以参考IIS.net documentation about URL rewrite module。