Nota
从 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.config
或 appsettings.json
中配置一样。 但是,应用服务中的值将替代 Web.config
或 appsettings.json
中的值。 可以在应用服务中安全地保留开发设置(例如本地 MySQL 密码)或Web.config
appsettings.json
生产机密(例如 Azure MySQL 数据库密码)。 同一代码在本地调试时使用开发设置,在部署到 Azure 时会使用生产机密。
其他语言堆栈也会在运行时获取应用设置作为环境变量。 有关特定于每个语言堆栈的步骤,请参阅:
应用设置在存储时始终进行加密(静态加密)。
在 Azure 门户中搜索并选择“应用服务” ,然后选择应用。
在应用的左侧菜单中,选择 “环境变量”。 然后选择 “应用设置”。
默认情况下,出于安全考虑,应用设置值会隐藏在门户中。 要查看某个应用设置的隐藏值,可选择其“值”字段。 要查看所有应用设置的隐藏值,可选择“显示值”按钮。
若要添加新的应用设置,请选择“添加”。 若要编辑设置,请选择该设置。
在对话框中,可将设置绑定到当前槽。
Nota
在默认 Linux 应用服务或自定义 Linux 容器中,应用设置名称中的任何嵌套 JSON 密钥结构都需要以不同的方式为密钥名称配置。 将任何冒号(:
)替换为双下划线(__
),并将任何句号(.
)替换为单个下划线(_
)。 例如,ApplicationInsights:InstrumentationKey
需要在应用服务中配置为密钥名称 ApplicationInsights__InstrumentationKey
。
完成后,选择应用。 不要忘记在“环境变量”页上选择“应用”。
使用 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>,...}
使用 Set-AzWebApp 设置一个或多个应用设置:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"<setting-name1>"="<value1>"; "<setting-name2>"="<value2>";...}
此 cmdlet 将整个应用设置集替换为指定的设置。 若要在现有集中添加或编辑应用设置,请使用 Get-AzWebApp cmdlet 在输入哈希表中包括现有应用设置。 例如:
# Get app configuration
$webapp=Get-AzWebApp -ResourceGroupName <group-name> -Name <app-name>
# Copy app settings to a new hash table
$appSettings = @{}
ForEach ($item in $webapp.SiteConfig.AppSettings) {
$appSettings[$item.Name] = $item.Value
}
# Add or edit one or more app settings
$appSettings['<setting-name1>'] = '<value1>'
$appSettings['<setting-name2>'] = '<value2>'
# Save changes
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings $appSettings
若要检查应用设置是否特定于槽,请使用 Get-AzWebAppSlotConfigName:
Get-AzWebAppSlotConfigName -ResourceGroupName <group-name> -Name <app-name> | select AppSettingNames
若要将一个或多个应用设置配置为特定插槽,请使用 Set-AzWebAppSlotConfigName:
Set-AzWebAppSlotConfigName -ResourceGroupName <group-name> -Name <app-name> -AppSettingNames <setting-name1>,<setting-name2>,...
选择“高级编辑”按钮。
编辑文本区域中的设置。
完成后,选择“确定”。 不要忘记在“环境变量”页上选择“应用”。
应用设置采用以下 JSON 格式:
[
{
"name": "<key-1>",
"value": "<value-1>",
"slotSetting": false
},
{
"name": "<key-2>",
"value": "<value-2>",
"slotSetting": false
},
...
]
运行 az webapp config app settings set 命令,并指定 JSON 文件的名称:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings "@fileName.json"
Sugerencia
仅在 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
不能通过将 JSON 文件与 Azure PowerShell 一起使用来批量编辑应用设置。
对于 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_
例如,可以使用环境变量 的形式访问名为 connectionstring1 的 MySQL 连接字符串。 有关特定于每个语言堆栈的步骤,请参阅:
连接字符串在存储时始终加密(静态加密)。
在 Azure 门户中搜索并选择“应用服务” ,然后选择应用。
在应用的左侧菜单中,选择 “环境变量”。 然后选择 “连接字符串”。
默认情况下,出于安全考虑,连接字符串的值会隐藏在门户中。 要查看某个连接字符串的隐藏值,可选择其“值”字段。 要查看所有连接字符串的隐藏值,可选择“显示值”按钮。
若要添加新的连接字符串,请选择“添加”。 若要编辑某个连接字符串,请选择该连接字符串。
在对话框中,可将连接字符串绑定到当前槽。
完成后,选择应用。 不要忘记在“环境变量”页上选择“应用”。
使用 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>,...}
使用 Set-AzWebApp 设置一个或多个连接字符串:
$PropertiesObject = @{
"<string-name1>" = @{
value="<connection-string1>";
type="<type>"};
"<string-name2>" = @{
value="<connection-string2>";
type="<type>"}
}
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -ConnectionStrings $PropertiesObject
每个连接字符串都包含一个名称(<string-name1>
)、一个值(<connection-string1>
)和类型。 类型是对应于 ConnectionStringType 枚举器字段之一的数值。 例如,对于 Azure SQL,请指定 type="2"
。
此 cmdlet 将整个连接字符串集替换为指定的连接字符串集。 若要在现有集中添加或编辑应用设置,请使用 Get-AzWebApp cmdlet 在输入哈希表中包括现有应用设置。 例如:
# Get app configuration
$webapp=Get-AzWebApp -ResourceGroupName <group-name> -Name <app-name>
# Copy connection strings to a new hash table
$connStrings = @{}
ForEach ($item in $webapp.SiteConfig.ConnectionStrings) {
$connStrings[$item.Name] = @{value=$item.ConnectionString; type=$item.Type.ToString()}
}
# Add or edit one or more connection strings
$connStrings['<string-name1>'] = @{value='<connection-string1>', type='<type>'}
$connStrings['<string-name2>'] = @{value='<connection-string2>', type='<type>'}
# Save changes
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -ConnectionStrings $connStrings
若要检查连接字符串是否特定于某个槽,请使用 Get-AzWebAppSlotConfigName:
Get-AzWebAppSlotConfigName -ResourceGroupName <group-name> -Name <app-name> | select ConnectionStringNames
若要使一个或多个连接字符串槽特定,请使用 Set-AzWebAppSlotConfigName:
Set-AzWebAppSlotConfigName -ResourceGroupName <group-name> -Name <app-name> -ConnectionStringNames <string-name1>,<string-name2>,...
选择“高级编辑”按钮。
在文本区域中编辑连接字符串。
完成后,选择应用。 不要忘记在“环境变量”页上选择“应用”。
连接字符串采用以下 JSON 格式:
[
{
"name": "name-1",
"value": "conn-string-1",
"type": "SQLServer",
"slotSetting": false
},
{
"name": "name-2",
"value": "conn-string-2",
"type": "PostgreSQL",
"slotSetting": false
},
...
]
运行 az webapp config connection-string set 命令,并使用 JSON 文件的名称:
az webapp config connection-string set --resource-group <group-name> --name <app-name> --settings "@fileName.json"
Sugerencia
仅在 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
不能通过将 JSON 文件与 Azure PowerShell 一起使用来批量编辑连接字符串。
在 Azure 门户中搜索并选择“应用服务” ,然后选择应用。
在应用的左侧菜单中,选择“ 配置”。 然后选择 “常规设置”。
在此处可以配置应用的某些常用设置。 某些设置要求纵向扩展到更高的定价层。
堆栈设置:配置软件堆栈的设置以运行应用,包括语言和 SDK 版本。
对于 Linux 应用,可以选择语言运行时版本并设置可选的启动命令。
平台设置:配置托管平台的设置,包括:
平台位性:选择 32 位或 64 位。 仅适用于 Windows 应用。
FTP 状态:仅允许 FTPS 或完全禁用 FTP。
HTTP 版本:设置为 2.0 以启用对 HTTPS/2 协议的支持。
Web 套接字配置 ASP.NET SignalR 或 socket.io。
Always On:如果您希望在没有流量时也能保持应用加载,请启用。
关闭 Always On (默认值),应用在 20 分钟后卸载,无需任何传入请求。 未加载的应用可能会因为存在预热时间而导致新请求的延迟过高。
启用 Always On 后,前端负载均衡器每五分钟向应用程序根发送一个 GET
请求。 连续的 ping 会阻止卸载该应用。
对于连续的 WebJobs 或使用 Cron 表达式触发的 WebJobs,Always On 是必需的。
会话相关性:在多实例部署中,确保客户端在会话生存期路由到同一实例。 对于无状态应用程序,请将此选项设置为“关闭”。
会话关联代理:如果应用位于反向代理(如 Azure 应用程序网关或 Azure Front Door)后面,并且使用的是默认主机名,请启用该代理。 会话黏性 Cookie 的域名将会与反向代理转发的主机名保持一致。
仅 HTTPS:如果要将所有 HTTP 流量重定向到 HTTPS,则启用。
最低 TLS 版本:选择应用所需的最低 TLS 加密版本。
调试:为 ASP.NET、ASP.NET Core 或 Node.js 应用启用远程调试。 此选项在 48 小时后会自动关闭。
传入客户端证书:需要在 相互身份验证中要求客户端证书。
可以使用 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 命令。
可以使用 Set-AzWebApp 设置许多常见的可配置选项。 以下示例显示了可配置选项的子集:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -Use32BitWorkerProcess [True|False] -WebSocketsEnabled [True|False] -AlwaysOn [True|False] -NumberOfWorkers
若要显示现有设置,请使用 Get-AzWebApp 命令。
默认文档是显示在应用服务应用的根 URL 上的网页。 使用列表中第一个匹配文件。 如果应用使用的模块基于 URL 进行路由而不是提供静态内容,则无需使用默认文档。
配置默认文档的设置仅适用于 Windows 应用。
在 Azure 门户中搜索并选择“应用服务” ,然后选择应用。
在应用的左侧菜单中,选择“ 配置”。 然后选择 “默认文档”。
要添加默认文档,可选择“新建文档”。 要移除默认文档,请选择其右侧的“删除”。
使用 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>
通过修改更新应用的 PowerShell 对象添加默认文档:
$webapp = Get-AzWebApp -ResourceGroupName <group-name> -Name <app-name>
$webapp.SiteConfig.DefaultDocuments.Add("<filename>")
Set-AzWebApp $webapp
默认情况下,应用服务从应用代码的根目录启动应用。 但某些 Web 框架不在根目录下启动。 例如,Laravel 在 public
子目录中启动。 例如,可在 http://contoso.com/public
中访问此类应用,但你通常需要改为将 http://contoso.com
定向到 public
目录。 如果应用的启动文件位于其他文件夹中,或者存储库包含多个应用程序,你可以编辑或添加虚拟应用程序和目录。
将虚拟目录映射到物理路径的功能仅在 Windows 应用中可用。
在 Azure 门户中搜索并选择“应用服务” ,然后选择应用。
在应用的左侧菜单中,选择“ 配置”。 然后选择 “路径映射”。
选择“新建虚拟应用程序或目录”。 然后执行以下操作之一:
- 若要将虚拟目录映射到物理路径,请选中“ 目录” 复选框。 指定虚拟目录,以及网站根目录相应的相对(物理)路径 (
D:\home
)。
- 若要将虚拟目录标记为 Web 应用程序,请清除 “目录” 复选框。
选择“确定”。 不要忘记在“配置”页上选择“保存”。
以下示例将根路径 /
设置为 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"
以下示例将根路径 /
设置为 public
子目录(适用于 Laravel)。 它还会在 /app2
路径中添加第二个虚拟应用程序。 若要运行它,请更改 <group-name>
和 <app-name>
。
$webapp=Get-AzWebApp -ResourceGroupName <group-name> -Name <app-name>
# Set default / path to public subdirectory
$webapp.SiteConfig.VirtualApplications[0].PhysicalPath= "site\wwwroot\public"
# Add a virtual application
$virtualApp = New-Object Microsoft.Azure.Management.WebSites.Models.VirtualApplication
$virtualApp.VirtualPath = "/app2"
$virtualApp.PhysicalPath = "site\wwwroot\app2"
$virtualApp.PreloadEnabled = $false
$webapp.SiteConfig.VirtualApplications.Add($virtualApp)
# Save settings
Set-AzWebApp $webapp
对于 Windows 应用,可以自定义 IIS 处理程序映射和虚拟应用程序与目录。 使用处理程序映射可以添加自定义脚本处理程序用于处理特定文件扩展名的请求。
添加自定义处理程序:
在 Azure 门户中搜索并选择“应用服务” ,然后选择应用。
在应用的左侧菜单中,选择“ 配置”。 然后选择 “路径映射”。
选择“新建处理程序映射”。 按如下所述配置处理程序:
- 扩展名。 要处理的文件扩展名,例如
*.php
或 handler.fcgi
。
- 脚本处理程序。 脚本处理程序的绝对路径。 脚本处理器处理与文件扩展名匹配的文件的请求。 使用路径
D:\home\site\wwwroot
表示应用的根目录。
- 参数。 脚本处理程序的可选命令行参数
选择“确定”。 不要忘记在“配置”页上选择“保存”。