教程:将现有的自定义 DNS 名称映射到 Azure 应用服务

Azure 应用服务提供高度可缩放、自修复的 Web 托管服务。 本教程介绍如何将现有的自定义域名系统 (DNS) 名称映射到应用服务。

在本教程中,你将了解如何执行以下操作:

  • 使用 CNAME 记录映射子域(例如 www.contoso.com)。
  • 使用 A 记录映射根域(例如 contoso.com)。
  • 使用 CNAME 记录映射通配符域(例如 *.contoso.com)。
  • 将默认 URL 重定向到自定义目录。

1.准备环境

  • 创建应用服务应用,或使用为另一教程创建的应用。

  • 购买域名,确保可以访问域提供商(如 GoDaddy)的 DNS 注册表。

    例如,若要添加 contoso.comwww.contoso.com 的 DNS 条目,必须能够配置 contoso.com 根域的 DNS 设置。

2.准备应用

若要将自定义 DNS 名称映射到 Web 应用,Web 应用的应用服务计划必须处于付费层(而非免费层 (F1))。 在此步骤中,需确保应用服务计划位于受支持的定价层。

登录 Azure

打开 Azure 门户,然后使用 Azure 帐户登录。

在 Azure 门户中选择应用

  1. 搜索并选择“应用服务”。

    演示如何选择应用服务的屏幕截图。

  2. 在“应用服务”页上,选择 Azure 应用的名称。

    显示到 Azure 应用的门户导航的屏幕截图。

    将看到应用服务应用的管理页。

检查定价层

  1. 在应用页的左侧窗格中,向下滚动到“设置”部分,然后选择“纵向扩展(应用服务计划)” 。

    显示“纵向扩展(应用服务计划)”菜单的屏幕截图。

  2. 蓝色边框突出显示了应用的当前层。 检查以确保应用不在 F1 层中。 F1 层不支持自定义 DNS。

    显示“建议的定价层”的屏幕截图。

  3. 如果应用服务计划不在 F1 层中,请关闭“纵向扩展”页并跳转到映射 CNAME 记录

增加应用服务计划

  1. 选择任何非免费层(D1B1B2B3,或“生产”类别中的任何层)。 有关其他选项,请选择“查看其他选项”。

  2. 选择“应用”。

    显示检查定价层的屏幕截图。

    看到以下通知时,说明缩放操作已完成。

    显示缩放操作确认的屏幕截图。

3.获取域验证 ID

若要将自定义域添加到应用,需要使用域提供程序添加验证 ID 作为 TXT 记录来验证你对域的所有权。

  1. 在应用页的左侧窗格中,选择“自定义域”。

  2. 复制“自定义域”页中的“自定义域验证 ID”框中的 ID,以便进行下一步操作 。

    显示“自定义域验证 ID”框中的 ID 的屏幕截图。

    警告

    向自定义域添加域验证 ID 可防止出现无关联的 DNS 条目,并避免子域接管。 对于先前配置的没有此验证 ID 的自定义域,应将验证 ID 添加到 DNS 记录中,以防止这些域面临相同的风险。 有关此常见高严重性威胁的详细信息,请参阅子域接管

4.映射域

可以使用 CNAME 记录或 A 记录将自定义 DNS 名称映射到应用服务。 请按照相应的步骤操作:

注意

应该对除根域(例如 contoso.com)以外的所有自定义 DNS 名称使用 CNAME 记录。 对于根域,请使用 A 记录。

映射 CNAME 记录

在教程示例中,为 www 子域(例如 www.contoso.com)添加 CNAME 记录。

如果你有除 www 以外的子域,请将 www 替换为你的子域(例如,如果你的自定义域为 sub.constoso.com,则使用 sub 进行替换)。

通过域提供商访问 DNS 记录

注意

可以使用 Azure DNS 为 Azure 应用服务配置自定义 DNS 名称。 有关详细信息,请参阅使用 Azure DNS 为 Azure 服务提供自定义域设置

请登录到域提供商的网站。

查找管理 DNS 记录的页面。 每个域提供商都有自己的 DNS 记录界面,因此请查阅提供商的文档。 查找站点中标记为“域名”、“DNS”或“名称服务器管理”的区域。

通常通过查看帐户信息,然后查找如“我的域”之类的链接,便可以找到 DNS 记录页面 。 转到该页面,然后查找名称类似于“区域文件”、“DNS 记录”或“高级配置”的链接 。

以下屏幕截图是 DNS 记录页的一个示例:

示例 DNS 记录页

在示例屏幕截图中,选择“添加”以创建记录 。 某些提供商提供了不同的链接来添加不同的记录类型。 同样,请查阅提供商的文档。

注意

对于某些提供商(例如 GoDaddy),在你选择单独的“保存更改”链接之前,这些 DNS 记录不会生效 。

创建 CNAME 记录

将子域映射到应用的默认域名(<app-name>.chinacloudsites.cn,其中 <app-name> 是应用的名称)。 若要为 www 子域创建 CNAME 映射,请创建两条记录:

记录类型 主机 Value 注释
CNAME www <app-name>.chinacloudsites.cn 域映射本身。
TXT asuid.www 之前获得的验证 ID 应用服务访问 asuid.<subdomain> TXT 记录以验证你对自定义域的所有权。

添加 CNAME 和 TXT 记录后,DNS 记录页如下例所示:

显示到 Azure 应用的门户导航的屏幕截图。

5.在应用中启用映射

  1. 在 Azure 门户中的应用页左侧窗格中,选择“自定义域”。

    显示“自定义域”菜单的屏幕截图。

  2. 在应用的“自定义域”页中,将完全限定的自定义 DNS 名称添加到 (www.contoso.com) 列表。

  3. 选择“添加自定义域”。

    显示“添加主机名”项的屏幕截图。

  4. 键入已添加 CNAME 记录的完全限定的域名,如 www.contoso.com

  5. 选择“验证”。 此时将显示“添加自定义域”页。

  6. 确保“主机名记录类型”设置为“CNAME(www.example.com 或任何子域)”。 选择“添加自定义域”。

    显示“添加自定义域”按钮的屏幕截图。

    新的自定义域可能需要经过一段时间后才会反映在应用的“自定义域”页中。 请尝试刷新浏览器来更新数据。

    演示如何添加 CNAME 记录的屏幕截图。

    注意

    自定义域带有警告标签意味着该域尚未绑定到 TLS/SSL 证书。 从浏览器向自定义域发出任何 HTTPS 请求都会收到错误或警告,具体取决于浏览器。

    如果之前错过了某个步骤或者在某个位置的输入不正确,则会在页面的底部显示验证错误。

    显示验证错误的屏幕截图。

映射 A 记录

在教程示例中,为根域(例如 contoso.com)添加 A 记录。

复制应用的 IP 地址

若要映射 A 记录,需要应用的外部 IP 地址。 可以在 Azure 门户中应用的“自定义域”页中找到此 IP 地址。

  1. 在 Azure 门户中的应用页左侧窗格中,选择“自定义域”。

    显示“自定义域”菜单的屏幕截图。

  2. 在“自定义域”页中,复制应用的 IP 地址。

    显示到 Azure 应用的门户导航的屏幕截图。

通过域提供商访问 DNS 记录

注意

可以使用 Azure DNS 为 Azure 应用服务配置自定义 DNS 名称。 有关详细信息,请参阅使用 Azure DNS 为 Azure 服务提供自定义域设置

请登录到域提供商的网站。

查找管理 DNS 记录的页面。 每个域提供商都有自己的 DNS 记录界面,因此请查阅提供商的文档。 查找站点中标记为“域名”、“DNS”或“名称服务器管理”的区域。

通常通过查看帐户信息,然后查找如“我的域”之类的链接,便可以找到 DNS 记录页面 。 转到该页面,然后查找名称类似于“区域文件”、“DNS 记录”或“高级配置”的链接 。

以下屏幕截图是 DNS 记录页的一个示例:

示例 DNS 记录页

在示例屏幕截图中,选择“添加”以创建记录 。 某些提供商提供了不同的链接来添加不同的记录类型。 同样,请查阅提供商的文档。

注意

对于某些提供商(例如 GoDaddy),在你选择单独的“保存更改”链接之前,这些 DNS 记录不会生效 。

创建 A 记录

若要将 A 记录映射到应用(通常是根域),请创建两条记录:

记录类型 主机 Value 注释
A @ 通过复制应用的 IP 地址获得的 IP 地址 域映射本身(@ 通常表示根域)。
TXT asuid 之前获得的验证 ID 应用服务访问 asuid.<subdomain> TXT 记录以验证你对自定义域的所有权。 对于根域,请使用 asuid

注意

若要使用 A 记录(而不是建议的 CNAME 记录)添加子域(如 www.contoso.com),A 记录和 TXT 记录应如下表所示:

记录类型 主机 Value
A www 通过复制应用的 IP 地址获得的 IP 地址
TXT asuid.www 之前获得的验证 ID

添加记录后,DNS 记录页与以下示例相似:

显示 DNS 记录页的屏幕截图。

在应用中启用 A 记录映射

在 Azure 门户中返回到应用的“自定义域”页,将完全限定的自定义 DNS 名称(例如 contoso.com)添加到列表。

  1. 选择“添加自定义域”。

    演示如何添加主机名的屏幕截图。

  2. 键入已配置 A 记录的完全限定的域名,如 contoso.com

  3. 选择“验证”。 此时会显示“添加自定义域”页。

  4. 确保“主机名记录类型”设置为“A 记录 (example.com)”。 选择“添加自定义域”。

    演示如何将主机名添加到应用的屏幕截图。

    新的自定义域可能需要经过一段时间后才会反映在应用的“自定义域”页中。 请尝试刷新浏览器来更新数据。

    演示如何添加 A 记录的屏幕截图。

    注意

    自定义域带有警告标签意味着该域尚未绑定到 TLS/SSL 证书。 从浏览器向自定义域发出任何 HTTPS 请求都会收到错误或警告,具体取决于浏览器。

    如果之前错过了某个步骤或者在某个位置的输入不正确,则会在页面的底部显示验证错误。

    显示验证错误的屏幕截图。

映射通配符域

在此教程示例中,你将通过添加 CNAME 记录将通配符 DNS 名称(例如 *.contoso.com)映射到应用服务应用。

通过域提供商访问 DNS 记录

注意

可以使用 Azure DNS 为 Azure 应用服务配置自定义 DNS 名称。 有关详细信息,请参阅使用 Azure DNS 为 Azure 服务提供自定义域设置

请登录到域提供商的网站。

查找管理 DNS 记录的页面。 每个域提供商都有自己的 DNS 记录界面,因此请查阅提供商的文档。 查找站点中标记为“域名”、“DNS”或“名称服务器管理”的区域。

通常通过查看帐户信息,然后查找如“我的域”之类的链接,便可以找到 DNS 记录页面 。 转到该页面,然后查找名称类似于“区域文件”、“DNS 记录”或“高级配置”的链接 。

以下屏幕截图是 DNS 记录页的一个示例:

示例 DNS 记录页

在示例屏幕截图中,选择“添加”以创建记录 。 某些提供商提供了不同的链接来添加不同的记录类型。 同样,请查阅提供商的文档。

注意

对于某些提供商(例如 GoDaddy),在你选择单独的“保存更改”链接之前,这些 DNS 记录不会生效 。

创建 CNAME 记录

将通配符名称 * 映射到应用的默认域名(<app-name>.chinacloudsites.cn,其中 <app-name> 是应用的名称)。 若要映射通配符名称,请创建两条记录:

记录类型 主机 Value 注释
CNAME * <app-name>.chinacloudsites.cn 域映射本身。
TXT asuid 之前获得的验证 ID 应用服务访问 asuid TXT 记录以验证你对自定义域的所有权。

*.contoso.com 域示例中, CNAME 记录将把名称 * 映射到 <app-name>.chinacloudsites.cn

添加 CNAME 时,DNS 记录页与以下示例相似:

显示到 Azure 应用的导航的屏幕截图。

在应用中启用 CNAME 记录映射

现在,可以将任何与通配符名称匹配的子域(例如 sub1.contoso.comsub2.contoso.com*.contoso.com 都匹配 *.contoso.com)添加到应用中。

  1. 在 Azure 门户中的应用页左侧窗格中,选择“自定义域”。

    显示“自定义域”菜单的屏幕截图。

  2. 选择“添加自定义域”。

    演示如何添加主机名的屏幕截图。

  3. 键入与通配符域相匹配的完全限定的域名(例如 sub1.contoso.com),然后选择“验证”。

    “添加自定义域”按钮随即激活。

  4. 确保“主机名记录类型”设置为“CNAME 记录(www.example.com 或任何子域)”。 选择“添加自定义域”。

    显示将 DNS 名称添加到应用的屏幕截图。

    新的自定义域可能需要经过一段时间后才会反映在应用的“自定义域”页中。 请尝试刷新浏览器来更新数据。

  5. 再次选择 + 图标,添加另一个与通配符域匹配的自定义域。 例如,添加 sub2.contoso.com

    演示如何添加 CNAME 记录的屏幕截图。

    注意

    自定义域带有警告标签意味着该域尚未绑定到 TLS/SSL 证书。 从浏览器向自定义域发出任何 HTTPS 请求都会收到错误或警告,具体取决于浏览器。


6.在浏览器中测试

浏览至你之前配置的 DNS 名称。

显示到 Azure 应用的导航的屏幕截图。

解决 404“未找到”错误

如果在浏览到自定义域的 URL 时收到 HTTP 404(未找到)错误,请验证域是否使用 WhatsmyDNS.net 对应用的 IP 地址进行解析。 如果未使用,则可能是由于以下原因之一:

  • 配置的自定义域缺少 A 记录或 CNAME 记录。
  • 浏览器客户端已缓存域的旧 IP 地址。 清除缓存并再次测试 DNS 解析。 在 Windows 计算机上,使用 ipconfig /flushdns 清除缓存。

迁移活动域

若要将实时站点及其 DNS 域名迁移到应用服务而不停机,请参阅将活动 DNS 名称迁移到 Azure 应用服务

重定向到自定义目录

注意

默认情况下,应用服务将 Web 请求定向到应用代码的根目录下。 但某些 Web 框架不在根目录下启动。 例如,Laravelpublic 子目录中启动。 若要继续使用 contoso.com DNS 示例,可在 http://contoso.com/public 中访问此类应用,但你通常需要改为将 http://contoso.com 定向到 public 目录。

虽然此方案很常见,但实际上,它并不涉及自定义 DNS 映射,而是涉及到在应用中自定义虚拟目录。

  1. 在 Web 应用页的左侧窗格中选择“应用程序设置”。

  2. 在页面底部,根虚拟目录 / 默认指向 site\wwwroot,这是应用代码的根目录。 将其改为指向例如 site\wwwroot\public,并保存所做的更改。

    演示如何自定义虚拟目录的屏幕截图。

  3. 操作完成后,请导航到浏览器(例如 http://contoso.comhttp://<app-name>.chinacloudsites.cn)中应用的根路径进行验证。

使用脚本自动化

可以使用 Azure CLIAzure PowerShell 通过脚本自动管理自定义域。

Azure CLI

以下命令将配置的自定义 DNS 名称添加到应用服务应用。

az webapp config hostname add \
    --webapp-name <app-name> \
    --resource-group <resource_group_name> \
    --hostname <fully_qualified_domain_name>

有关详细信息,请参阅将自定义域映射到 Web 应用

Azure PowerShell

注意

若要与 Azure 交互,建议使用 Azure Az PowerShell 模块。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

以下命令将配置的自定义 DNS 名称添加到应用服务应用。

Set-AzWebApp `
    -Name <app-name> `
    -ResourceGroupName <resource_group_name> ` 
    -HostNames @("<fully_qualified_domain_name>","<app-name>.chinacloudsites.cn")

有关详细信息,请参阅将自定义域分配到 Web 应用