本文内容
注意
从 2024 年 6 月 1 日开始,所有新创建的应用服务应用都可以选择生成唯一的默认主机名,命名约定为 <app-name>-<random-hash>.<region>.chinacloudsites.cn
。 现有应用名称将保持不变。
示例: myapp-ds27dh7271aah175.westus-01.chinacloudsites.cn
本文介绍如何配置 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 时使用生产机密。
同样,其他语言堆栈也会在运行时获取应用设置作为环境变量。 有关特定的语言堆栈步骤,请参阅:
应用程序设置在存储时始终进行加密(静态加密)。
在 Azure 门户 中搜索并选择“应用服务” ,然后选择应用。
在应用的左侧菜单中,选择“环境变量”>“应用设置” 。
默认情况下,出于安全考虑,应用设置值会隐藏在门户中。 要查看某个应用设置的隐藏值,可选择其“值 ”字段。 要查看所有应用设置的隐藏值,可选择“显示值 ”按钮。
若要添加新的应用设置,请选择“添加” 。 若要编辑某个设置,请单击该设置。
在对话框中,可将设置绑定到当前槽 。
注意
在默认 Linux 应用服务或自定义 Linux 容器中,需要在应用服务中将应用设置名称(如 ApplicationInsights:InstrumentationKey
)中的任何嵌套 JSON 密钥结构配置为密钥名称的 ApplicationInsights__InstrumentationKey
。 换而言之,应将任何 :
替换为 __
(双下划线)。 应用设置名称中的任何句点都将替换为 _
(单下划线)。
完成后,选择“应用” 。 不要忘记返回“环境变量”页并选择“应用” 。
使用 az webapp config app settings set 添加或编辑应用设置:
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 将现有应用设置包含在输入 Hashtable 中。 例如:
# Get app configuration
$webapp=Get-AzWebApp -ResourceGroupName <group-name> -Name <app-name>
# Copy app settings to a new Hashtable
$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
},
...
]
使用 JSON 文件的名称运行 az webapp config app settings set 。
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
不能通过将 JSON 文件与 Azure PowerShell 一起使用来批量编辑应用设置。
对于 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_
例如,可以使用环境变量 MYSQLCONNSTR_connectionString1
的形式访问名为 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 枚举字段之一对应的数值)。 例如,对于 SQL Azure,请指定 type="2"
。
此 cmdlet 将整个连接字符串集替换为指定的连接字符串。 若要添加或编辑现有集内的应用设置,请使用 Get-AzWebApp cmdlet 将现有应用设置包含在输入 Hashtable 中。 例如:
# Get app configuration
$webapp=Get-AzWebApp -ResourceGroupName <group-name> -Name <app-name>
# Copy connection strings to a new hashtable
$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
},
...
]
使用 JSON 文件的名称运行 az webapp config connection-string set 。
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
不能通过将 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 是必需的。
会话亲和性:在多实例部署中,请确保在会话的整个生存期内将客户端路由到同一实例。 对于无状态应用程序,请将此选项设置为“关闭”。
仅 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 命令。
此设置仅适用于 Windows 应用。
默认文档是在应用服务应用的根 URL 中显示的网页。 使用列表中第一个匹配文件。 如果应用使用的模块基于 URL 进行路由而不是提供静态内容,则无需使用默认文档。
在 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
将 URL 路径映射到目录
默认情况下,应用服务从应用代码的根目录启动应用。 但某些 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
表示应用的根目录。
参数 。 脚本处理程序的可选命令行参数
选择“确定” 。 不要忘记在“配置”页中选择“保存” 。
后续步骤