一目了然
目標: 控制開發代理是否捕捉所有系統流量,還是只捕捉明確路由的流量
時間: 5分鐘
前置條件:設定開發代理
預設情況下,當你啟動開發代理時,它會自動註冊為系統代理。 因此,你機器上的所有 HTTP/HTTPS 流量都會自動透過開發代理(Dev Proxy)路由。 透過 Dev Proxy 代理所有流量在大多數情況下效果良好——你啟動 Dev Proxy,它會立即從你的應用程式擷取請求,無需額外設定。
不過,有些情況下你可能想更控制哪些流量會經過 Dev Proxy。 這個 asSystemProxy 選項可以讓你停用自動系統代理註冊,讓你能細緻控制哪些應用程式使用 Dev 代理。
何時停用系統代理登錄
建議在以下情況設定 asSystemProxy 為 false:
- 你在一個企業網路上 ,你不想覆蓋現有的代理設定。
- 你只想測試特定應用程式 ,而不會影響你機器上執行的其他應用程式
- 其他應用程式在 Dev Proxy 攔截流量時(例如 Azure Functions)會失敗
- 你正在運行多個開發代理實例 ,想要將流量導向特定實例
- 你要盡量減少 對系統服務和背景程序的干擾
設定系統代理選項
你可以用兩種方式設定這個 asSystemProxy 選項:使用設定檔或命令列。
組態檔
要持續停用系統代理註冊,請將設定 asSystemProxy 加入你的設定檔。
檔案:devproxyrc.json
目的: 停用自動系統代理註冊
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.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 應用程式使用 Dev 代理) -
Azure Functions: 設定代理伺服器
local.settings.json(參見 搭配 .NET Azure Functions 使用開發代理伺服器)
範例:測試 Azure 函式而不干擾啟動
Azure Functions 使用 gRPC 進行內部通訊,當開發代理(Dev Proxy)被註冊為系統代理時,gRPC 通訊會失敗。 要使用 Azure Functions 的開發代理,請停用系統代理註冊,並透過環境變數設定代理。
檔案:devproxyrc.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.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 請求則透過開發代理路由。
範例:測試一個應用程式,其他應用程式則不受影響
當你同時開發多個應用程式時,可能只想用其中一個應用程式的開發代理。 關閉系統代理註冊,並只設定環境變數給目標應用程式。
無需系統代理註冊即可啟動開發代理:
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
你機器上的其他應用程式則正常運作,沒有任何代理干擾。
執行多個開發代理實例
當你設定 asSystemProxy 為 false時,可以同時執行多個開發代理實例。 每個實例會監聽自己的埠,並使用每個實例的狀態檔案追蹤自己的狀態。
啟動多個實例
每個實例都從不同的埠口啟動:
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
如果你執行 --pid 時未使用 devproxy logs,Dev Proxy 會顯示系統代理實例的日誌,或者如果沒有註冊為系統代理,則顯示最近啟動的實例。 Dev Proxy 也會列印通知,告訴你它選擇了哪個實例,並列出其他執行實例的程序 ID。
備註
同一時間只能將一個開發代理實例註冊為系統代理。 如果你嘗試啟動一個將 asSystemProxy 設定為 true 的新實例,而此時另一個系統代理實例已經在運行,Dev Proxy 會阻擋啟動。