你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

配置应用服务应用

注意

从 2024 年 6 月 1 日开始,所有新创建的应用服务应用都可以选择生成唯一的默认主机名,命名约定为 <app-name>-<random-hash>.<region>.azurewebsites.net。 现有应用名称将保持不变。

示例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

有关更多详细信息,请参阅应用服务资源的唯一默认主机名

本文介绍如何配置 Web 应用、移动后端或 API 应用的常用设置。 对于 Azure Functions,请参阅 Azure Functions 的应用设置参考

配置应用设置

注意

  • 应用设置名称只能包含字母、数字 (0-9)、句点 (".") 和下划线 ("_")
  • “应用设置”值中的特殊字符必须根据目标操作系统的需要进行转义

例如,要在应用服务 Linux 中设置具有值 "pa$$w0rd\" 的环境变量,应用程序设置的字符串应为:"pa\$\$w0rd\\"

在应用服务中,应用设置是作为环境变量传递给应用程序代码的变量。 对于 Linux 应用和自定义容器,应用服务使用 --env 标志将应用设置传递到容器,以在容器中设置环境变量。 无论是这两种情况中的哪一种,它们都会在应用启动时注入到应用环境。 在添加、删除或编辑应用设置时,应用服务会触发应用重启。

对于 ASP.NET 和 ASP.NET Core 开发人员而言,在应用服务中设置应用设置类似于在 Web.config 或 appsettings.json 中的 <appSettings> 内进行设置,但应用服务中的值会替代 Web.config 或 appsettings.json 中的值。 可以在 Web.config 或 appsettings.json 中保留开发设置(例如本地 MySQL 密码),并在应用服务中安全地保留生产机密(例如 Azure MySQL 数据库密码) 。 相同的代码在本地调试时使用开发设置,部署到 Azure 时使用生产机密。

同样,其他语言堆栈也会在运行时获取应用设置作为环境变量。 有关特定的语言堆栈步骤,请参阅:

应用程序设置在存储时始终进行加密(静态加密)。

注意

如果在应用设置中存储机密,请考虑使用 Key Vault 引用。 如果机密用于连接到后端资源,请考虑使用根本不需要机密的更安全的连接选项。 有关详细信息,请参阅从 Azure应用服务安全地连接到 Azure 服务和数据库

  1. Azure 门户中搜索并选择“应用服务” ,然后选择应用。

    搜索应用服务

  2. 在应用的左侧菜单中,选择“环境变量”>“应用设置”

    显示如何导航到“应用设置”页的屏幕截图。

    默认情况下,出于安全考虑,应用设置值会隐藏在门户中。 要查看某个应用设置的隐藏值,可选择其“”字段。 要查看所有应用设置的隐藏值,可选择“显示值”按钮。

  3. 若要添加新的应用设置,请选择“添加”。 若要编辑某个设置,请单击该设置。

  4. 在对话框中,可将设置绑定到当前槽

    注意

    在默认 Linux 应用服务或自定义 Linux 容器中,需要在应用服务中将应用设置名称(如 ApplicationInsights:InstrumentationKey)中的任何嵌套 JSON 密钥结构配置为密钥名称的 ApplicationInsights__InstrumentationKey。 换而言之,应将任何 : 替换为 __(双下划线)。 应用设置名称中的任何句点都将替换为 _(单下划线)。

  5. 完成后,选择“应用”。 不要忘记返回“环境变量”页并选择“应用”

批量编辑应用设置

选择“高级编辑”按钮。 编辑文本区域中的设置。 完成后,选择“确定”。 不要忘记返回“环境变量”页并选择“应用”

应用设置采用以下 JSON 格式:

[
  {
    "name": "<key-1>",
    "value": "<value-1>",
    "slotSetting": false
  },
  {
    "name": "<key-2>",
    "value": "<value-2>",
    "slotSetting": false
  },
  ...
]

配置连接字符串

注意

请考虑使用根本不需要连接机密的更安全的连接选项。 有关详细信息,请参阅从 Azure应用服务安全地连接到 Azure 服务和数据库

对于 ASP.NET 和 ASP.NET Core 开发人员而言,在应用服务中设置连接字符串类似于在 Web.config 中的 <connectionStrings> 内进行设置,但应用服务中设置的值会替代 Web.config 中的值。可将开发设置(例如,数据库文件)保留在 Web.config 中,并将生产机密(例如,SQL 数据库凭据)安全保留在应用服务中。 相同的代码在本地调试时使用开发设置,部署到 Azure 时使用生产机密。

对于其他语言堆栈,最好是改用应用设置,因为连接字符串需要在变量键中使用特殊的格式才能访问值。

注意

有一种情况你需要使用连接字符串而不是非 .NET 语言的应用设置:仅当你在应用服务应用中为数据库配置连接字符串时,某些 Azure 数据库类型才会与应用一起备份。 有关详细信息,请参阅创建自定义备份。 如果不需要这种自动化备份,请使用应用设置。

在运行时,连接字符串可用作环境变量,其前缀为以下连接类型:

  • SQLServer:SQLCONNSTR_
  • MySQL: MYSQLCONNSTR_
  • SQLAzure:SQLAZURECONNSTR_
  • 自定义:CUSTOMCONNSTR_
  • PostgreSQL:POSTGRESQLCONNSTR_
  • 通知中心:NOTIFICATIONHUBCONNSTR_
  • 服务总线:SERVICEBUSCONNSTR_
  • 事件中心:EVENTHUBCONNSTR_
  • 文档 DB:DOCDBCONNSTR_
  • Redis 缓存:REDISCACHECONNSTR_

注意

面向 PostgreSQL、通知中心、服务总线、文档 DB 和 Redis 缓存的 .NET 应用应将连接字符串设置为“自定义”,以解决 .NET EnvironmentVariablesConfigurationProvider 中的已知问题

例如,可以使用环境变量 MYSQLCONNSTR_connectionString1 的形式访问名为 connectionstring1 的 MySQL 连接字符串。 有关特定的语言堆栈步骤,请参阅:

连接字符串在存储时始终进行加密(静态加密)。

注意

也可以使用 Key Vault 引用Key Vault 解析连接字符串。

  1. Azure 门户中搜索并选择“应用服务” ,然后选择应用。

    搜索应用服务

  2. 在应用的左侧菜单中,选择“环境变量”>“连接字符串”

    显示打开到“连接字符串”的 UI 的屏幕截图。

    默认情况下,出于安全考虑,连接字符串的值会隐藏在门户中。 要查看某个连接字符串的隐藏值,可选择其“”字段。 要查看所有连接字符串的隐藏值,可选择“显示值”按钮。

  3. 若要添加新的连接字符串,请选择“添加”。 若要编辑某个连接字符串,请选择该连接字符串。

  4. 在对话框中,可将连接字符串绑定到当前槽

  5. 完成后,选择“应用”。 不要忘记返回“环境变量”页并选择“应用”

批量编辑连接字符串

选择“高级编辑”按钮。 在文本区域中编辑连接字符串。 完成后,选择“应用”。 不要忘记返回“环境变量”页并选择“应用”

连接字符串采用以下 JSON 格式:

[
  {
    "name": "name-1",
    "value": "conn-string-1",
    "type": "SQLServer",
    "slotSetting": false
  },
  {
    "name": "name-2",
    "value": "conn-string-2",
    "type": "PostgreSQL",
    "slotSetting": false
  },
  ...
]

配置语言堆栈设置

配置常规设置

Azure 门户中搜索并选择“应用服务” ,然后选择应用。 在应用的左侧菜单中,选择“配置”>“常规设置”。

常规设置

在此处可以配置应用的某些常用设置。 某些设置要求纵向扩展到更高的定价层

  • 堆栈设置:用于运行应用的软件堆栈,包括语言和 SDK 版本。

    对于 Linux 应用,可选择语言运行时版本,并设置启动命令文件或可选的启动命令。

    Linux 容器的常规设置

  • 平台设置:用于配置托管平台的设置,包括:

    • 平台位数:32 位或 64 位。 仅适用于 Windows 应用。
    • FTP 状态:仅允许 FTPS 或完全禁用 FTP。
    • HTTP 版本:设置为“2.0”,以启用对 HTTPS/2 协议的支持。

    注意

    大多数新型浏览器仅支持通过 TLS 的 HTTP/2 协议,而非加密流量继续使用 HTTP/1.1。 若要确保客户端浏览器使用 HTTP/2 连接到应用,请保护自定义 DNS 名称。 有关详细信息,请参阅在 Azure 应用服务中使用 TLS/SSL 绑定保护自定义 DNS 名称

    • Web 套接字:例如,适用于 ASP.NET SignalRsocket.io

    • Always On:即使没有流量,也保持应用的加载状态。 如果未打开(默认)Always On,则会在 20 分钟后卸载该应用,而无需任何传入请求。 卸载的应用可能会因为存在预热时间而导致新请求的延迟过高。 如果打开了 Always On,前端负载均衡器会每隔五分钟向应用程序根目录发送一次 GET 请求。 请务必确保此请求收到 200 正常响应,以确保正确执行任何重新映像操作。 连续的 ping 会阻止卸载该应用。

      对于连续的 WebJobs 或使用 CRON 表达式触发的 WebJobs,Always On 是必需的。

    • 会话亲和性:在多实例部署中,请确保在会话的整个生存期内将客户端路由到同一实例。 对于无状态应用程序,请将此选项设置为“关闭”。

    • 会话亲和性代理:如果应用位于反向代理(例如 Azure 应用程序网关或 Azure Front Door)后面,并且你使用的是默认主机名,则可以启用会话亲和性代理。 会话亲和性 Cookie 的域将与反向代理中转发的主机名保持一致。

    • 仅 HTTPS:启用后,会将所有 HTTP 流量重定向到 HTTPS。

    • 最低 TLS 版本:选择应用所需的最低 TLS 加密版本。

  • 调试:为 ASP.NETASP.NET CoreNode.js 应用启用远程调试。 此选项在 48 小时后会自动关闭。

  • 传入的客户端证书:要求在相互身份验证中使用客户端证书。

配置默认文档

此设置仅适用于 Windows 应用。

默认文档是在应用服务应用的根 URL 中显示的网页。 使用列表中第一个匹配文件。 如果应用使用的模块基于 URL 进行路由而不是提供静态内容,则无需使用默认文档。

  1. Azure 门户中搜索并选择“应用服务” ,然后选择应用。

  2. 在应用的左侧菜单中,选择“配置”>“默认文档”。

    默认文档

  3. 要添加默认文档,可选择“新建文档”。 要移除默认文档,请选择其右侧的“删除”。

将 URL 路径映射到目录

默认情况下,应用服务从应用代码的根目录启动应用。 但某些 Web 框架不在根目录下启动。 例如,Laravelpublic 子目录中启动。 例如,可在 http://contoso.com/public 中访问此类应用,但你通常需要改为将 http://contoso.com 定向到 public 目录。 如果应用的启动文件位于其他文件夹中,或者存储库包含多个应用程序,你可以编辑或添加虚拟应用程序和目录。

重要

物理路径的虚拟目录功能仅在 Windows 应用中可用。

  1. Azure 门户中搜索并选择“应用服务” ,然后选择应用。

  2. 在应用的左侧菜单中,选择“配置”>“路径映射”

  3. 选择“新建虚拟应用程序或目录”。

    • 若要将虚拟目录映射到物理路径,请将“目录”复选框保持选中状态。 指定虚拟目录,以及网站根目录相应的相对(物理)路径 (D:\home)。
    • 若要将虚拟目录标记为 Web 应用程序,请清除“目录”复选框。

    “目录”复选框

  4. 选择“确定”。 不要忘记在“配置”页中选择“保存”

配置处理程序映射

对于 Windows 应用,可以自定义 IIS 处理程序映射和虚拟应用程序与目录。 使用处理程序映射可以添加自定义脚本处理程序用于处理特定文件扩展名的请求。

添加自定义处理程序:

  1. Azure 门户中搜索并选择“应用服务” ,然后选择应用。

  2. 在应用的左侧菜单中,选择“配置”>“路径映射”。

    路径映射

  3. 选择“新建处理程序映射”。 按如下所述配置处理程序:

    • 扩展名。 要处理的文件扩展名,例如 *.php 或 handler.fcgi。
    • 脚本处理程序。 脚本处理程序的绝对路径。 与文件扩展名匹配的文件请求由脚本处理程序处理。 使用路径 D:\home\site\wwwroot 表示应用的根目录。
    • 参数。 脚本处理程序的可选命令行参数
  4. 选择“确定”。 不要忘记在“配置”页中选择“保存”

配置自定义容器

后续步骤