概览
目标: 控制开发代理是捕获所有系统流量还是仅显式路由流量
时间: 5 分钟
先决条件:设置开发代理
默认情况下,启动开发代理时,它会自行注册为系统代理。 因此,计算机上的所有 HTTP/HTTPS 流量都通过开发代理自动路由。 通过开发代理对所有流量进行代理对于大多数场景非常有效——启动开发代理后,它会自动立即捕获来自应用程序的请求,无需任何额外的配置。
但是,在某些情况下,你可能希望更精确地掌控哪些流量通过 Dev Proxy。 使用 asSystemProxy 此选项可以禁用自动系统代理注册,从而可以精细控制哪些应用程序使用开发代理。
何时禁用系统代理注册
请考虑在asSystemProxy以下情况下设置false:
- 你正在 一个企业网络上,此网络具有你不想更改的现有代理设置
- 你只想测试特定应用程序 ,而不会影响计算机上运行的其他应用
- 当开发代理截获其流量(例如 Azure Functions)时,其他应用程序会失败
- 你正在运行多个开发代理的实例,并希望将流量路由到特定实例
- 你希望最大程度地减少 对系统服务和后台进程的干扰
配置系统代理选项
可以通过两种方式配置 asSystemProxy 选项:使用配置文件或命令行。
配置文件
若要永久禁用系统代理注册,请将 asSystemProxy 设置添加到配置文件。
文件:devproxyrc.json
目的: 禁用自动系统代理注册
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
"asSystemProxy": false,
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
命令行
若要禁用单个会话的系统代理注册,请使用 --as-system-proxy 此选项。
devproxy --as-system-proxy false
手动将流量路由到开发代理服务器
禁用系统代理注册时,应用程序不会自动通过开发代理路由其流量。 需要将每个应用程序配置为显式使用开发代理(Dev Proxy)。
使用环境变量
将流量路由到开发代理的最常见方法是设置 HTTPS_PROXY 环境变量。
PowerShell:
$env:HTTPS_PROXY = "http://127.0.0.1:8000"
node app.js
命令提示符:
set HTTPS_PROXY=http://127.0.0.1:8000
node app.js
HTTPS_PROXY=http://127.0.0.1:8000 node app.js
小窍门
某些应用程序还支持 HTTP_PROXY 环境变量。 如果您的应用程序同时进行 HTTP 和 HTTPS 请求,请同时设置这两种配置。
特定于语言的配置
不同的编程语言和框架具有自己的代理配置方式:
- Node.js: 使用 全局代理 包或直接配置 HTTP 代理
-
.NET: 设置
HTTPS_PROXY环境变量或使用代理配置HttpClient(请参阅 将开发代理与 .NET 应用程序配合使用) -
Azure Functions: 配置
local.settings.json代理(请参阅 将开发代理与 .NET Azure Functions 配合使用)
示例:在不干扰启动的情况下测试 Azure Functions
Azure Functions 使用 gRPC 进行内部通信,当将开发代理服务器注册为系统代理时将会失败。 若要将开发代理与 Azure Functions 配合使用,请禁用系统代理注册并通过环境变量配置代理。
文件:devproxyrc.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
"asSystemProxy": false,
"urlsToWatch": [
"https://jsonplaceholder.typicode.com/*"
]
}
文件:local.settings.json
{
"IsEncrypted": false,
"Values": {
"HTTPS_PROXY": "http://127.0.0.1:8000"
}
}
使用此配置,Azure Functions 可以正常启动,并将对受监视 URL 的 HTTP 请求通过 Dev Proxy 进行路由。
示例:测试一个应用程序,同时使其他应用程序不受影响
同时开发多个应用程序时,可能需要仅将开发代理与其中一个应用程序一起使用。 禁用系统代理注册,并仅为目标应用程序设置环境变量。
在没有系统代理注册的情况下启动开发代理:
devproxy --as-system-proxy false
在单独的终端中,使用配置的代理运行应用程序:
$env:HTTPS_PROXY = "http://127.0.0.1:8000"
npm start
HTTPS_PROXY=http://127.0.0.1:8000 npm start
计算机上的其他应用程序继续正常运行,没有任何代理干扰。
运行多个开发代理实例
设置为 asSystemProxyfalse时,可以同时运行多个开发代理实例。 每个实例侦听其自己的端口,并使用每个实例状态文件跟踪自己的状态。
启动多个实例
在不同的端口上启动每个实例:
devproxy --as-system-proxy false --port 8000 --config-file devproxyrc-api1.json
在另一个终端中:
devproxy --as-system-proxy false --port 9000 --config-file devproxyrc-api2.json
检查正在运行的实例的状态
若要查看所有正在运行的实例,请使用 status 以下命令:
devproxy status
停止特定实例
若要以特定实例为目标,请使用 --pid 命令中的 stop 选项:
devproxy stop --pid 6456
停止所有正在运行的实例:
devproxy stop
查看特定实例中的日志
使用 --pid 选项与 logs 命令一起:
devproxy logs --pid 6456
注释
一次只能将一个开发代理实例注册为系统代理。 如果尝试在已经有一个系统代理实例运行时启动一个新实例并设置asSystemProxy为true,Dev Proxy将阻止启动。