使用系統代理選項

一目了然
目標: 控制開發代理是否捕捉所有系統流量,還是只捕捉明確路由的流量
時間: 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 請求,請同時設定兩者。

語言專屬配置

不同的程式語言和框架都有自己配置代理的方式:

範例:測試 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 會阻擋啟動。

另請參閱