配置应用服务应用

注意

从 2024 年 6 月 1 日开始,新创建的应用服务应用可以生成使用命名约定 <app-name>-<random-hash>.<region>.chinacloudsites.cn 的唯一默认主机名。 现有应用名称保持不变。 例如:

myapp-ds27dh7271aah175.chinanorth3-01.chinacloudsites.cn

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

配置应用设置

在 Azure 应用服务中,应用设置是作为环境变量传递给应用程序代码的变量。 以下条件适用于应用设置:

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

例如,若要使用值 "pa$$w0rd\"在适用于 Linux 的应用服务中设置环境变量,应用设置的字符串应为 "pa\$\$w0rd\\"

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

对于 ASP.NET 和 ASP.NET Core 开发人员来说,在应用服务中配置应用设置就像在 <appSettings>Web.configappsettings.json中配置一样。 但是,应用服务中的值将替代 Web.configappsettings.json 中的值。 可以在应用服务中安全地保留开发设置(例如本地 MySQL 密码)或Web.configappsettings.json生产机密(例如 Azure MySQL 数据库密码)。 同一代码在本地调试时使用开发设置,在部署到 Azure 时会使用生产机密。

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

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

注意

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

使用 az webapp config 应用设置集添加或编辑应用设置:

az webapp config appsettings set --name <app-name> --resource-group <group-name> --settings <setting-name>="<value>"

请将 <setting-name> 替换为设置的名称。 将 <value> 替换为要分配给设置的值。

使用命令 az webapp config appsettings list 来显示所有设置及其值。

az webapp config appsettings list --name <app-name> --resource-group <group-name>

使用 az webapp config app settings delete 删除一个或多个设置:

az webapp config appsettings delete --name <app-name> --resource-group <group-name> --setting-names {<setting-name1>,<setting-name2>,...}

批量编辑应用设置

运行 az webapp config app settings set 命令,并指定 JSON 文件的名称:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings "@fileName.json"

提示

仅在 PowerShell 中需要用引号包装文件名。

必要的文件格式是一个 JSON 数组,其中槽设置字段是可选的。 例如:

[
  {
    "name": "key1",
    "slotSetting": false,
    "value": "value1"
  },
  {
    "name": "key2",
    "value": "value2"
  }
]

为方便起见,可以使用 az webapp config appsettings list 将现有设置保存在 JSON 文件中。 可以在 Bash 中运行以下示例。

# Save the settings
az webapp config appsettings list --name <app-name> --resource-group <group-name> > settings.json

# Edit the JSON file
...

# Update the app with the JSON file
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings @settings.json

配置连接字符串

注意

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

对于 ASP.NET 和 ASP.NET 核心开发人员,在应用服务中设置连接字符串就像在 <connectionStrings>Web.config设置连接字符串一样。 但是,在应用服务中设置的值将替代其中 Web.config的值。 可以在应用服务中 Web.config 安全地保留开发设置(例如数据库文件)和生产机密(例如 SQL 数据库凭据)。 同一代码在本地调试时使用开发设置,在部署到 Azure 时会使用生产机密。

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

在某些情况下,对于非 .NET 语言,你可能会选择使用连接字符串,而不是应用设置。 只有在应用服务应用中为数据库配置了连接字符串时,某些 Azure 数据库类型才会被备份。 有关详细信息,请参阅创建自定义备份。 如果不需要此自动备份,请使用应用设置。

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

  • SQL Server: SQLCONNSTR_
  • MySQL: MYSQLCONNSTR_
  • Azure SQL: SQLAZURECONNSTR_
  • 自定义:CUSTOMCONNSTR_
  • PostgreSQL:POSTGRESQLCONNSTR_
  • Azure 通知中心: NOTIFICATIONHUBCONNSTR_
  • Azure 服务总线: SERVICEBUSCONNSTR_
  • Azure 事件中心: EVENTHUBCONNSTR_
  • Azure Cosmos DB: DOCDBCONNSTR_
  • Redis 缓存: REDISCACHECONNSTR_

注意

面向 PostgreSQL、通知中心、服务总线、事件中心、Azure Cosmos DB 和 Redis 缓存的 .NET 应用应将连接字符串设置为 Custom 作为 .NET EnvironmentVariablesConfigurationProvider 中已知问题的解决方法。

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

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

注意

您还可以通过使用 Key Vault 引用 来解析在 Key Vault 中存储的连接字符串。

使用 az webapp config connection-string set 添加或编辑应用设置:

az webapp config connection-string set --name <app-name> --resource-group <group-name> --connection-string-type <type> --settings <string-name>='<value>'

<string-name> 替换为连接字符串的名称。 将<value>替换为要分配给连接字符串的值。 若要查看可能的 <type> 值(例如 SQLAzure),请参阅 CLI 命令文档

使用 az webapp config connection-string list 显示所有连接字符串及其值:

az webapp config connection-string list --name <app-name> --resource-group <group-name>

使用 az webapp config connection-string delete 删除一个或多个连接字符串:

az webapp config connection-string delete --name <app-name> --resource-group <group-name> --setting-names {<string-name1>,<string-name2>,...}

批量编辑连接字符串

运行 az webapp config connection-string set 命令,并使用 JSON 文件的名称:

az webapp config connection-string set --resource-group <group-name> --name <app-name> --settings "@fileName.json"

提示

仅在 PowerShell 中需要用引号包装文件名。

必需的文件格式是连接字符串的 JSON 数组,其中槽设置字段是可选的。 例如:

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

为方便起见,可以使用 az webapp config connection-string list 将现有连接字符串保存在 JSON 文件中。 可以在 Bash 中运行以下示例。

# Save the connection strings
az webapp config connection-string list --resource-group <group-name> --name <app-name> > settings.json

# Edit the JSON file
...

# Update the app with the JSON file
az webapp config connection-string set --resource-group <group-name> --name <app-name> --settings @settings.json

配置语言堆栈设置

配置常规设置

可以使用 az webapp config set 设置许多常见的可配置选项。 以下示例显示了可配置选项的子集:

az webapp config set --resource-group <group-name> --name <app-name> --use-32bit-worker-process [true|false] --web-sockets-enabled [true|false] --always-on [true|false]--http20-enabled --auto-heal-enabled [true|false] --remote-debugging-enabled [true|false] --number-of-workers

若要显示现有设置,请使用 az webapp config show 命令。

配置默认文档

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

配置默认文档的设置仅适用于 Windows 应用。

使用 az resource update 添加默认文档:

az resource update --resource-group <group-name> --resource-type "Microsoft.Web/sites/config" --name <app-name>/config/web --add properties.defaultDocuments <filename>

将 URL 路径映射到目录

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

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

以下示例将根路径 / 设置为 public 子目录(适用于 Laravel)。 它还会在 /app2 路径中添加第二个虚拟应用程序。 若要运行它,请创建一个名为 json.txt 的文件,并包含以下内容:

[
  {
    "physicalPath"':' "site\\wwwroot\\public",
    "preloadEnabled"':' false,
    "virtualDirectories"':' null,
    "virtualPath"':' "/"
  },
  {
    "physicalPath"':' "site\\wwwroot\\app2",
    "preloadEnabled"':' false,
    "virtualDirectories"':' null,
    "virtualPath"':' "/app2"
  }
]

更改资源的 <group-name><app-name> 并运行以下命令。 运行此命令时请注意转义字符。 有关转义字符的详细信息,请参阅有关成功使用 Azure CLI 的提示

az resource update --resource-group <group-name> --resource-type Microsoft.Web/sites/config --name <app-name>/config/web --set properties.virtualApplications="@json.txt"

配置处理程序映射

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

添加自定义处理程序:

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

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

    显示用于显示路径映射的选择的屏幕截图。

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

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

配置自定义容器