一目了然
目標: 使用 Dev Proxy 搭配 Windows 子系統 for Linux(WSL)
時間: 15分鐘
前置條件:設定開發代理,安裝 WSL
在 WSL(Linux 的 Windows 子系統)開發應用程式時,使用 Dev Proxy 有兩種選擇:在 Windows 主機上執行或在 WSL 內部執行。 兩種方法各有優點,取決於你的開發工作流程。
選項一:在 Windows 主機上使用 Dev Proxy(建議)
最簡單的方法是在 Windows 上安裝並執行 Dev Proxy。 透過 WSL 的自動代理與鏡像網路模式,WSL 使用 Windows 系統代理,因此在 WSL 中執行的應用程式流量會被 Dev Proxy 截取,而無需在 WSL 中設定代理。
配置 WSL 網路
Dev Proxy 預設會將自己註冊為 Windows 系統 Proxy,使用 localhost 位址(預設為 127.0.0.1:8000)。 若要讓 WSL 中的應用程式使用此 Proxy,請在 Windows 上位於 %UserProfile%\.wslconfig 的 WSL 設定檔中,啟用 [wsl2] 區段中的下列設定:
[wsl2]
networkingMode=mirrored
autoProxy=true
| Setting | Description |
|---|---|
networkingMode=mirrored |
將 Windows 網路介面鏡像至 Linux,允許 WSL 應用程式使用 127.0.0.1 連線到執行於 Windows 上的伺服器,例如 Dev Proxy。 需 Windows 11 版本 22H2 或更新版本。 預設值為 nat。 |
autoProxy=true |
讓 WSL 使用 Windows 的 HTTP 代理設定,因此 Windows 上設定的代理會自動在 WSL 中設定。 可在 Windows 11 上使用。 默認為啟用。 |
更改 .wslconfig 檔案後,重新啟動 WSL 以使變更生效:
wsl --shutdown
備註
在預設的 NAT 網路模式下,WSL 中的應用程式無法使用 127.0.0.1 連線到 Windows 上的 Dev Proxy。 如果你無法使用鏡像網路模式,建議改在 WSL 裡執行 Dev Proxy。 更多資訊請參見 選項二:WSL 內的 Dev Proxy。
欲了解更多資訊,請參閱 使用 WSL 存取網路應用程式 及 WSL 中的進階設定設定。
在 Windows 上設定開發代理
啟動開發代理伺服器:
devproxy當被要求時,請相信該證書。
使用 WSL 的開發代理
當 Dev Proxy 在 Windows 上作為系統代理執行(預設行為),且你設定了 WSL 網路時,WSL 中的應用程式會自動將流量路由到它。
像平常一樣在WSL開始申請。 Dev Proxy 攔截由使用代理設定的應用程式發出的 HTTPS 請求。
這很重要
啟動或停止開發代理後重新啟動 WSL
WSL 啟動時會讀取 Windows 代理設定。 如果你在 WSL 已經運行後啟動 Dev Proxy,或是停止再重新啟動 Dev Proxy,則需要重新啟動 WSL 才能生效:
wsl --shutdown
然後開始新的 WSL 遊戲。
信任WSL的證書
為了讓開發代理攔截 HTTPS 流量,WSL 中的應用程式必須信任開發代理憑證。 你可以從 Windows 複製憑證,或用 Dev Proxy API 匯出。
選項A:從Windows複製憑證
在 WSL 中,從 Windows 複製憑證:
cp "/mnt/c/Users/<your-username>/AppData/Local/Programs/Dev Proxy/rootCert.pfx" ~/匯出並安裝憑證:
# Export the certificate openssl pkcs12 -in ~/rootCert.pfx -clcerts -nokeys -out dev-proxy-ca.crt -passin pass:"" # Install the certificate sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/ # Update certificates sudo update-ca-certificates
選項 B:使用 Dev Proxy API
開發代理 API 需要 Bearer 權杖。 當 Dev Proxy 在 Windows 上運行時,請在 Windows 終端機執行 API 令牌指令來取得權杖:
devproxy api token
接著,在 WSL 中下載並安裝憑證。 用你取回的權杖來替換 <token> :
# Download the certificate from Dev Proxy API
curl -H "Authorization: Bearer <token>" -o dev-proxy-ca.crt "http://127.0.0.1:8897/proxy/rootCertificate?format=crt"
# Install the certificate
sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/
# Update certificates
sudo update-ca-certificates
備註
有些應用程式可能需要額外設定才能信任系統憑證儲存。 對於 Node.js 應用,你可能需要設定 NODE_TLS_REJECT_UNAUTHORIZED=0 以供開發用途。 不建議在生產程式碼中停用憑證驗證。
選項二:在 WSL 內設置開發代理
如果你想完全在 WSL 裡執行 Dev Proxy,可以用 Linux 安裝方式安裝,然後手動設定代理。
在 WSL 中安裝開發代理
設定腳本需要 unzip 來解壓縮 Dev Proxy。 像 Ubuntu 這類全新安裝的 WSL 發行版預設不包含它。 安裝 unzip:
sudo apt update
sudo apt install unzip
使用設定腳本安裝開發代理:
bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)"
手動設定代理
由於 WSL 沒有圖形桌面環境,Dev Proxy 無法自動註冊為系統代理。 設定你的應用程式手動使用代理伺服器。
建立一個 Dev Proxy 設定檔,設定
asSystemProxy為false:{ "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json", "asSystemProxy": false, "plugins": [ { "name": "RetryAfterPlugin", "enabled": true, "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll" }, { "name": "GenericRandomErrorPlugin", "enabled": true, "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll", "configSection": "genericRandomErrorPlugin" } ], "urlsToWatch": [ "https://jsonplaceholder.typicode.com/*" ], "genericRandomErrorPlugin": { "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/genericrandomerrorplugin.schema.json", "errorsFile": "devproxy-errors.json", "rate": 50 }, "logLevel": "information" }啟動開發代理伺服器:
devproxy相信這份證書:
# Export Dev Proxy root certificate openssl pkcs12 -in ~/.config/dev-proxy/rootCert.pfx -clcerts -nokeys -out dev-proxy-ca.crt -passin pass:"" # Install the certificate sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/ # Update certificates sudo update-ca-certificates將你的應用程式設定為使用代理伺服器。 設定
HTTPS_PROXY環境變數:export HTTPS_PROXY=http://127.0.0.1:8000或者在執行應用程式時指定:
HTTPS_PROXY=http://127.0.0.1:8000 node app.js
小提示
欲了解更多關於如何為 Node.js 應用程式設定代理的資訊,請參閱「 在 Node.js 應用程式中使用開發代理」。
方法比較
| 特徵 / 功能 | Windows 主機(選項 1) | WSL內部(選項二) |
|---|---|---|
| 設置複雜度 | Simple | 溫和 |
| Requirements | Windows 11 22H2 或更新版本,支援 WSL 鏡像網路模式 | None |
| 憑證管理 | 一次性從 Windows 複製 | 手動匯出 |
| Proxy 設定 | 自動(WSL 自動代理) | 手排(HTTPS_PROXY) |
| WSL需要重啟 | 是的,切換代理伺服器時 | 否 |
| 適用於所有 WSL 應用程式 | Yes | 這要看應用程式代理的支援 |
在大多數情況下,建議在 Windows 上執行開發代理(選項 1),因為它簡單且能自動設定代理。
故障排除
使用 Windows 主機時,請求不會被攔截
如果 Windows 上的 Dev Proxy 無法攔截 WSL 的請求:
請確認
networkingMode=mirrored和autoProxy=true已在[wsl2]檔案的.wslconfig區段中設定。 欲了解更多資訊,請參閱 設定 WSL 網路設定。重新啟動 WSL 以刷新代理設定:
wsl --shutdown確認 Dev Proxy 是否正在運行並作為系統代理註冊。
檢查開發代理憑證在 WSL 中是否被信任。
unzip:找不到指令
如果安裝腳本失敗並出現錯誤 unzip: command not found,請安裝 unzip,然後再次執行安裝腳本:
sudo apt update
sudo apt install unzip
憑證錯誤
如果你看到憑證錯誤:
- 確保您已按照WSL 中的信任憑證步驟安裝憑證。
- 對於 Node.js 應用程式,你可能需要設定應用程式來使用代理伺服器。 請參考「 使用開發代理搭配 Node.js 應用程式」。
WSL 網路問題
WSL 2 使用虛擬化網路介面卡。 如果你遇到網路問題:
- 確保你的 Windows 防火牆允許開發代理。
- 試著在設定代理位址時用
localhost代替127.0.0.1。