避免将数百或数千个主机名映射到Azure网站

时间:2017-09-27 16:06:24

标签: azure azure-web-sites

我需要在一个Azure网站上指向数百甚至数千个主机名。对于一个简单的理由,您可以将其视为虚荣/品牌重定向站点。例如:

  1. 访问http://marketing.example.com会让您重定向到https://example.sharepoint.com/sites/themarketingteam
  2. 访问http://finance.example.com会让您重定向到http://someinternalservce.example.com/reports/finance
  3. 访问http://hr.example.com/会让您重定向到https://saponline.net/examplecorp
  4. 我知道我可以将* .example.com DNS条目映射到我的azure web应用程序,但这并不具有吸引力,因为该域只获得其中一个并试图说服权力相对简单/愚蠢的需求是他们如何使用外卡条目。

    同样,我知道我可以进入Azure门户和/或使用Powershell手动将条目添加到配置中,但这看起来像是一项额外的工作,需要管理重定向映射的人员能够更好地控制Web应用程序的Azure设置。

    此解决方案是否有任何巧妙的解决方法?是否有一层服务使我的应用程序获得了我自己的IP地址,让我可以为其执行DNS别名?是否有其他Azure产品可能会重写/转发到我的应用程序,但没有上述限制?

1 个答案:

答案 0 :(得分:0)

根据我的理解,您可以利用IIS URL RewriteUsing rewrite maps for redirection将以下代码配置到您网站的web.config文件的system.webServer部分,如下所示:

<rewrite>
  <rewriteMaps>
    <rewriteMap name="hostRedirects">
      <add key="marketing.example.com" value="https://example.sharepoint.com/sites/themarketingteam"/>
      <add key="finance.example.com" value="http://someinternalservce.example.com/reports/finance"/>
    </rewriteMap>
  </rewriteMaps>

  <rules>
    <rule name="Redirect rule" stopProcessing="true">
      <match url=".*"/>
      <conditions>
        <add input="{hostRedirects:{HTTP_HOST}}" pattern="(.+)"/>
      </conditions>
      <action type="Redirect" url="{C:1}" appendQueryString="true" redirectType="Permanent"/>
    </rule>
  </rules>
</rewrite>

此外,您可以使用DbProvider,FileMapProvider等将URL映射存储到db或文件中。我建议你使用FileMapProvider,它可以将重写映射条目存储在一个文件中,而不是将它们保存在web.config文件中。有关详细信息,请参阅Using Custom Rewrite Providers with URL Rewrite Module

此外,您可以编写代码并构建自定义HttpMoudle来检查传入主机,然后根据需要重定向。这是一篇讨论详细步骤的博客,您可以参考here