通过


将 Dev Proxy 与 WSL 配合使用

概览
目标: 将开发代理与适用于 Linux 的 Windows 子系统配合使用(WSL)
时间: 15 分钟
先决条件:设置开发代理,安装 WSL

在 WSL(适用于 Linux 的 Windows 子系统)中开发应用程序时,有两种使用开发代理的选项:在 Windows 主机或 WSL 中运行它。 这两种方法都有其优势,具体取决于开发工作流。

最简单的方法是在 Windows 上安装和运行开发代理。 WSL 自动使用 Windows 系统代理,因此 WSL 中运行的应用程序的流量被开发代理截获,无需额外配置。

在 Windows 上设置开发代理

  1. 使用 winget 或手动安装在 Windows 上安装开发代理

  2. 启动开发代理:

    devproxy
    
  3. 在提示时信任证书。

从 WSL 使用开发代理

当开发代理作为系统代理在 Windows 上运行(默认行为),WSL 中的应用程序会自动通过它路由其流量。

像平常一样在 WSL 中启动应用程序。 开发代理截获应用程序发出的 HTTPS 请求。

重要

启动或停止开发代理后重启 WSL

WSL 缓存系统代理设置。 如果在 WSL 正在运行后启动开发代理,或者停止并重启开发代理,则需要重启 WSL 才能使更改生效:

wsl --shutdown

然后启动新的 WSL 会话。

信任 WSL 中的证书

若要让开发代理截获 HTTPS 流量,WSL 中的应用程序需要信任开发代理证书。 可以从 Windows 复制证书或使用开发代理 API 导出证书。

选项 A:从 Windows 复制证书

  1. 在 WSL 中,从 Windows 复制证书:

    cp /mnt/c/Users/<your-username>/.config/dev-proxy/rootCert.pfx ~/
    
  2. 导出并安装证书:

    # 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:使用开发代理 API

在 Windows 上运行开发代理时,请下载并安装证书:

# Download the certificate from Dev Proxy API
curl -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 。 不建议对生产代码禁用证书验证。

选项 2:WSL 中的开发代理

如果想要在 WSL 中完全运行开发代理,请使用 Linux 安装方法安装它并手动配置代理。

在 WSL 中安装开发代理

使用安装脚本安装开发代理:

bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)"

手动配置代理

由于 WSL 没有图形桌面环境,因此开发代理无法自动注册为系统代理。 将应用程序配置为手动使用代理。

  1. 创建一个 Dev Proxy 配置文件,其中 asSystemProxy 设置为 false:

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.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/v2.3.0/genericrandomerrorplugin.schema.json",
        "errorsFile": "devproxy-errors.json"
      },
      "rate": 50,
      "logLevel": "information"
    }
    
  2. 启动开发代理:

    devproxy
    
  3. 信任证书:

    # 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
    
  4. 将应用程序配置为使用代理。 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 内(选项 2)
配置复杂性 简单 中等
证书管理 从 Windows 进行一次性复制 手动导出
代理配置 自动(系统代理) 手动 (HTTPS_PROXY
需要 WSL 重启 是的,切换代理时
适用于所有 WSL 应用 是的 取决于应用代理支持

对于大多数方案,建议在 Windows 上运行开发代理(选项 1),因为它的简单性和自动代理配置。

故障排除

使用 Windows 主机时,请求不会被截获

如果 Windows 上的开发代理未截获来自 WSL 的请求:

  1. 重启 WSL 以刷新代理设置:

    wsl --shutdown
    
  2. 验证 Dev Proxy 是否正在运行并注册为系统代理。

  3. 检查 WSL 中是否信任开发代理证书。

证书错误

如果看到证书错误:

  1. 确保按照 WSL 中的“信任证书”中的步骤在 WSL 中安装证书。
  2. 对于 Node.js 应用程序,您可能需要将应用程序配置为使用代理服务器。 请参阅 将开发代理用于 Node.js 应用程序

WSL 网络问题

WSL 2 使用虚拟化网络适配器。 如果遇到网络问题:

  1. 确保 Windows 防火墙允许开发代理。
  2. 尝试使用 localhost ,而不是 127.0.0.1 在配置代理地址时使用。