Перейти к содержимому
RU

Главная / Блог / Развёртывание

Шпаргалка по прокси для разработчика — Git, npm, pip, Go, Maven и SSH

Развёртывание2026-06-101206 слов3 мин чтения
Шпаргалка по прокси для разработчика — Git, npm, pip, Go, Maven и SSH

Консольные инструменты системный прокси не читают. Здесь собраны настройки для самых распространённых, чтобы брать нужное.

Предполагаем, что ваш смешанный порт — 7897 (проверьте в настройках портов Clash Verge; умолчания у версий разные).

Сначала переменные окружения — они закрывают больше половины

Большинство инструментов, следующих соглашениям Unix, уважает эти:

# macOS / Linux / WSL
export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897
export all_proxy=socks5://127.0.0.1:7897
export no_proxy="localhost,127.0.0.1,::1,*.local,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
# Windows PowerShell (текущая сессия)
$env:HTTP_PROXY  = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:NO_PROXY    = "localhost,127.0.0.1,::1,*.local"
:: Windows CMD
set HTTP_PROXY=http://127.0.0.1:7897
set HTTPS_PROXY=http://127.0.0.1:7897

Оформите парой shell-функций:

# ~/.zshrc или ~/.bashrc
proxyon() {
  export http_proxy=http://127.0.0.1:7897
  export https_proxy=$http_proxy
  export all_proxy=socks5://127.0.0.1:7897
  export no_proxy="localhost,127.0.0.1,::1,*.local"
  echo "✓ proxy on"
}
proxyoff() {
  unset http_proxy https_proxy all_proxy no_proxy
  echo "✗ proxy off"
}

Git

У Git своя система настроек. Переменные окружения работают для HTTPS, но не для SSH.

# HTTPS
git config --global http.proxy http://127.0.0.1:7897
git config --global https.proxy http://127.0.0.1:7897

# отменить
git config --global --unset http.proxy
git config --global --unset https.proxy

# посмотреть
git config --global --get-regexp proxy

Проксировать только один хост (рекомендуется, чтобы корпоративный Git-сервер туда не попал):

git config --global http.https://github.com.proxy http://127.0.0.1:7897

Git по SSH ([email protected]:xxx.git) игнорирует http.proxy и требует настройки SSH:

# ~/.ssh/config
Host github.com
  HostName github.com
  User git
  Port 22
  # macOS / Linux
  ProxyCommand nc -X connect -x 127.0.0.1:7897 %h %p
  # Windows (в Git Bash есть connect.exe)
  # ProxyCommand connect -H 127.0.0.1:7897 %h %p

npm / yarn / pnpm

# npm
npm config set proxy http://127.0.0.1:7897
npm config set https-proxy http://127.0.0.1:7897
npm config delete proxy && npm config delete https-proxy   # отменить

# yarn (v1)
yarn config set proxy http://127.0.0.1:7897
yarn config set https-proxy http://127.0.0.1:7897

# pnpm
pnpm config set proxy http://127.0.0.1:7897
pnpm config set https-proxy http://127.0.0.1:7897

Настройки лежат в ~/.npmrc и правятся напрямую:

proxy=http://127.0.0.1:7897
https-proxy=http://127.0.0.1:7897
noproxy=localhost,127.0.0.1,.company.com

Python / pip

# разово
pip install --proxy http://127.0.0.1:7897 requests

# постоянно
pip config set global.proxy http://127.0.0.1:7897
pip config unset global.proxy

Расположение файла настроек:

  • Windows: %APPDATA%\pip\pip.ini
  • macOS/Linux: ~/.config/pip/pip.conf
[global]
proxy = http://127.0.0.1:7897
index-url = https://pypi.org/simple

Библиотека requests тоже читает переменные окружения, а в коде можно указать явно:

proxies = {
    "http": "http://127.0.0.1:7897",
    "https": "http://127.0.0.1:7897",
}
requests.get(url, proxies=proxies)

Go

# модули Go через официальный прокси (обычно достаточно, локальный не нужен)
go env -w GOPROXY=https://proxy.golang.org,direct

# региональное зеркало
go env -w GOPROXY=https://goproxy.cn,direct

# приватные репозитории мимо прокси
go env -w GOPRIVATE=*.company.com,github.com/myorg/*

# когда локальный прокси всё-таки нужен (скажем, приватный репозиторий на GitHub)
go env -w GOPROXY=direct
export HTTPS_PROXY=http://127.0.0.1:7897

go get уважает переменные окружения HTTP_PROXY и HTTPS_PROXY.

Java / Maven / Gradle

Maven (~/.m2/settings.xml):

<settings>
  <proxies>
    <proxy>
      <id>clash</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>127.0.0.1</host>
      <port>7897</port>
      <nonProxyHosts>localhost|127.0.0.1|*.company.com</nonProxyHosts>
    </proxy>
  </proxies>
</settings>

Gradle (~/.gradle/gradle.properties):

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=7897
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=7897
systemProp.http.nonProxyHosts=localhost|127.0.0.1|*.company.com

Флаги командной строки JVM:

java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=7897 \
     -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=7897 \
     -Dhttp.nonProxyHosts="localhost|127.0.0.1" -jar app.jar

Rust / Cargo

~/.cargo/config.toml:

[http]
proxy = "http://127.0.0.1:7897"

[https]
proxy = "http://127.0.0.1:7897"

curl / wget

# curl, разово
curl -x http://127.0.0.1:7897 https://example.com
curl --socks5 127.0.0.1:7897 https://example.com

# curl, постоянно (~/.curlrc)
echo 'proxy = "http://127.0.0.1:7897"' >> ~/.curlrc

# wget, постоянно (~/.wgetrc)
cat >> ~/.wgetrc <<'EOF'
use_proxy = on
http_proxy = http://127.0.0.1:7897
https_proxy = http://127.0.0.1:7897
EOF

Системные пакетные менеджеры

# apt (/etc/apt/apt.conf.d/95proxy)
echo 'Acquire::http::Proxy "http://127.0.0.1:7897";' | sudo tee /etc/apt/apt.conf.d/95proxy
echo 'Acquire::https::Proxy "http://127.0.0.1:7897";' | sudo tee -a /etc/apt/apt.conf.d/95proxy

# dnf/yum (добавьте в /etc/dnf/dnf.conf)
# proxy=http://127.0.0.1:7897

# Homebrew (macOS) — читает окружение
export ALL_PROXY=socks5://127.0.0.1:7897
brew install xxx

Сводная таблица

ИнструментКак настраиваетсяЧитает переменные окружения
curl / wgetФлаг -x или .curlrc
Git (HTTPS)git config http.proxy
Git (SSH)ProxyCommand в ~/.ssh/config
npm / yarn / pnpm.npmrc⚠️ В некоторых версиях
pippip.conf
GoПеременные окружения плюс GOPROXY
Mavensettings.xml
Gradlegradle.properties
Cargo.cargo/config.toml
Демон Dockerdrop-in для systemd
apt / dnfСобственные файлы настроек⚠️ Теряются под sudo
HomebrewПеременные окружения

Почему переменные окружения иногда не работают

Частые причиныУ инструмента своя система настроек (Maven, Gradle, демон Docker) — нужен файл конфигурацииВы использовали sudo, и окружение не передалось — добавьте -EПеременные действуют только в текущем shell — в новом терминале их нетПроблема регистра — часть инструментов читает только строчное http_proxyИнструмент идёт по SSH, а не по HTTP — здесь нужен ProxyCommandno_proxy слишком широкий и исключил нужный домен

Путь попроще: включить TUN

Всё вышеперечисленное складывается, и каждый новый установленный инструмент, возможно, придётся настраивать снова.

С включённым TUN каждый консольный инструмент проксируется автоматически, и настраивать не нужно ничего.

Цена — привилегии виртуального адаптера плюс необходимость добавить приватные диапазоны в прямые правила:

prepend-rules:
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - DOMAIN-SUFFIX,company.com,DIRECT
Компромисс между двумя подходамиНастраивать каждый инструментточно и управляедополнительных привилегий не требуетутомительно, когда инструментов многоподходит серверамРежим TUNнастроил один ранужны привилегии виртуального адаптераможет конфликтовать с контейнерами или VPNподходит машине разработчика

Проверка

# какой у меня выходной IP
curl https://api.ipify.org

# идёт ли Git через прокси (-v печатает детали соединения)
GIT_CURL_VERBOSE=1 git ls-remote https://github.com/git/git 2>&1 | head -20

# настройки npm
npm config list | grep -i proxy

Можно также открыть страницу подключений в Clash Verge и следить за новыми записями во время выполнения команды — появилась запись, значит трафик прошёл.

Коротко

  • Сначала пробуйте переменные окружения; они покрывают curl, pip, Go, Cargo, Homebrew и многое другое
  • У Git, npm, Maven, Gradle и Docker свои системы настроек, их надо делать отдельно
  • SSH требует ProxyCommand либо перехода на порт 443
  • no_proxy обязателен, иначе ломаются локальные и внутренние сервисы
  • Помните про -E при sudo
  • Если всё это слишком, включите TUN — но настройте прямые правила для приватных диапазонов

Смотрите также: прокси для Docker и WSL2 и правила по процессам.


Смежные документы

Как подключить Docker и WSL2 к Clash на хосте
Развёртывание Как подключить Docker и WSL2 к Clash на хосте

127.0.0.1 внутри контейнера — это не хост. Настройка для всех трёх сценариев Docker (загрузка образов демоном, сборка, запуск) плюс два подхода для разных режимов сети WSL2.

2026-06-141187 слов3 мин чтения
Mihomo как домашний шлюз — прозрачное проксирование на софт-роутере или NAS
Развёртывание Mihomo как домашний шлюз — прозрачное проксирование на софт-роутере или NAS

Нулевая настройка для каждого устройства в доме. Компромиссы трёх подходов (боковой роутер, TProxy, TUN), полная конфигурация и служба systemd, правила брандмауэра и отказоустойчивость, чтобы домашние оставались в сети.

2026-06-051632 слов4 мин чтения
Управляющий API Clash целиком — эндпойнты, панели и скрипты автоматизации
Развёртывание Управляющий API Clash целиком — эндпойнты, панели и скрипты автоматизации

Полный RESTful API, который открывает external-controller: переключение узлов, просмотр соединений, перезагрузка конфигурации, развёртывание веб-панели и несколько практичных скриптов.

2026-06-011194 слов3 мин чтения