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

Tom*_*mmy 6 azure azure-web-sites

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

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

  1. 在我们的区域管理器中创建了正确的CNAME DNS记录(完整且有效).
  2. 设置Azure WebApp以响应子域(完整且有效).
  3. 为第二个Web应用程序设置虚拟目录(完成并正常工作)

此时,两个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在发布,与源代码控制集成等方面的工具集似乎更进一步.

Tom*_*mmy 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的结构.从我所知道的,目前的在线文档并没有明确说明这一点.

  • 汤米,你是对的.您可以在同一个应用服务计划中拥有多个站点,并且您需要为其中的应用服务计划和实例付费,而不是针对站点数量. (2认同)

Rus*_*anY 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>
Run Code Online (Sandbox Code Playgroud)

要了解重写规则的语法,可以参考有关URL重写模块IIS.net文档