将子域映射到虚拟目录Azure WebApps

时间:2015-10-05 15:32:44

标签: azure azure-web-sites

我尝试在单个Azure WebApp中托管多个网站,而不是每个托管网站的多个网络应用程序。这些站点中的每一个都相当小,但为了满足SLA与Azure的要求,我们需要让服务器针对我们的生产环境使用多个实例进行扩展,这是组合站点的原因。

在研究了这个主题之后,我使用Azure帐户进行了以下设置。

  1. 在我们的区域管理器中创建了正确的CNAME DNS记录(完整且有效)。
  2. 设置Azure WebApp以响应子域(完整且有效)。
  3. 为第二个Web应用程序设置虚拟目录(完成并正常工作)
  4. 此时,两个Web应用程序都正常运行,两个子域都指向我们的Azure实例。我们现在有以下设置:

    • www.mydomain.com和app.mydomain.com都会显示我部署的根应用程序。
    • 访问www.mydomain.com/app2,app.mydomain.com / app2调出我部署到虚拟目录的第二个应用程序

    我想要实现的目标:

    • 转到app.mydomain.com会在虚拟目录中显示该应用程序。
    • 访问www.mydomain.com会在azure实例的根目录中显示应用程序。

    然而,我无法弄清楚的是如何将子域映射到特定的虚拟目录。我曾尝试将站点URL更新为我希望应用程序响应的子域,但是,子域仍会显示我在WebApp部署的根目录中所拥有的内容。

    我是否应该拥有一些位于站点根目录中的HttpHandler并将流量引导到正确的虚拟目录?我缺少门户网站中的设置吗?以前,我们使用Web角色和修补ServiceDefinition文件来完成此操作,但Azure Web Apps在发布,与源代码控制集成等方面的工具集似乎更进一步。

2 个答案:

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