Использование Dev Proxy с WSL

На первый взгляд
Цель: Использование прокси-сервера разработки с подсистемой Windows для Linux (WSL)
Время: 15 минут
Предварительные требования:Настройка прокси-сервера разработки, установленного WSL

При разработке приложений в WSL (подсистема Windows для Linux) вы можете использовать прокси-сервер разработки: запуск приложения на узле Windows или в WSL. Оба подхода имеют свои преимущества в зависимости от рабочего процесса разработки.

Самый простой подход — установить и запустить прокси-сервер разработки в Windows. WSL автоматически использует системный прокси-сервер Windows, поэтому приложения, работающие в WSL, перехватываются прокси-сервером разработки без дополнительной настройки.

Настройка прокси-сервера разработки в Windows

  1. Установите прокси-сервер разработки в Windows с помощью winget или ручной установки.

  2. Запуск прокси-сервера разработки:

    devproxy
    
  3. При появлении запроса доверяйте сертификату.

Использование прокси-сервера разработки из WSL

Когда прокси-сервер разработки запускается в качестве системного прокси-сервера в Windows (поведение по умолчанию), приложения в WSL автоматически направляют трафик через него.

Запустите ваше приложение в WSL как обычно. Прокси-сервер разработки перехватывает HTTPS-запросы, сделанные приложением.

Это важно

Перезапустите WSL после запуска или остановки Dev Proxy (прокси для разработки)

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 не имеет графической настольной среды, Dev Proxy не может автоматически зарегистрироваться в качестве системного прокси-сервера. Настройте приложения для использования прокси-сервера вручную.

  1. Создайте файл конфигурации прокси-сервера для разработки с asSystemProxy заданным значением false:

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.4.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.4.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. Убедитесь, что прокси-сервер разработки запущен и зарегистрирован в качестве системного прокси-сервера.

  3. Убедитесь, что сертификат Dev Proxy доверенный в WSL.

Ошибки сертификатов

Если вы видите ошибки сертификата:

  1. Убедитесь, что сертификат установлен в WSL, выполнив действия, описанные в разделе "Доверять сертификату в WSL".
  2. Для Node.js приложений может потребоваться настроить приложение для использования прокси-агента. См. раздел "Использование прокси-сервера разработки" с Node.js приложениями.

Проблемы с сетью WSL

WSL 2 использует виртуализированный сетевой адаптер. При возникновении проблем с сетью:

  1. Убедитесь, что брандмауэр Windows разрешает Dev Proxy.
  2. Попробуйте использовать localhost вместо 127.0.0.1 настройки прокси-адреса.