رفتن به محتوای اصلی
FA

خانه / وبلاگ / استقرار

راهنمای سریع پروکسی برای توسعه‌دهنده — Git و npm و pip و Go و Maven و SSH

استقرار2026-06-101436 واژه3 دقیقه مطالعه
راهنمای سریع پروکسی برای توسعه‌دهنده — Git و npm و pip و Go و Maven و SSH

ابزارهای خط فرمان پروکسی سیستم را نمی‌خوانند. اینجا پیکربندی رایج‌ترین‌ها یکجا جمع شده تا هر چه لازم دارید بردارید.

فرض بر این است که پورت mixed شما 7897 است (در تنظیمات پورت Clash Verge ببینید؛ پیش‌فرض نسخه‌ها فرق دارد).

اول متغیرهای محیطی — بیش از نیمی را پوشش می‌دهند

بیشتر ابزارهایی که از عرف یونیکس پیروی می‌کنند این‌ها را رعایت می‌کنند:

# 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

به شکل دو تابع پوسته درش بیاورید:

# ~/.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 (نسخهٔ ۱)
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

محل فایل تنظیمات:

  • ویندوز: %APPDATA%\pip\pip.ini
  • مک/لینوکس: ~/.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/*

# وقتی واقعاً پروکسی محلی لازم است (مثلاً کشیدن مخزن خصوصی گیت‌هاب)
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 (مک) — محیط را می‌خواند
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⚠️ در بعضی نسخه‌ها
pipفایل pip.conf
Goمتغیر محیطی به‌علاوهٔ GOPROXY
Mavenفایل settings.xml
Gradleفایل gradle.properties
Cargoفایل .cargo/config.toml
دیمون Dockerdrop-in برای systemd
apt / dnfفایل تنظیمات خودشان⚠️ زیر sudo از دست می‌رود
Homebrewمتغیرهای محیطی

چرا گاهی متغیرهای محیطی کاری نمی‌کنند

علت‌های رایجابزار سامانهٔ تنظیمات خودش را دارد (Maven، Gradle، دیمون Docker) — فایل پیکربندی لازم استاز sudo استفاده کرده‌اید و محیط منتقل نشده — سوییچ -E را اضافه کنیدمتغیرها فقط در پوستهٔ جاری اثر دارند — ترمینال تازه آن‌ها را نداردمسئلهٔ بزرگی حروف — بعضی ابزارها فقط http_proxy کوچک را می‌خوانندابزار از SSH می‌رود نه HTTP — آنجا ProxyCommand لازم استمقدار no_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 نیاز دارد، یا به رفتن روی پورت ۴۴۳
  • no_proxy اجباری است، وگرنه سرویس‌های محلی و داخلی همه می‌شکنند
  • با sudo سوییچ -E را یادتان باشد
  • اگر همهٔ این‌ها زیادی است، TUN را روشن کنید — ولی قواعد مستقیم بازه‌های خصوصی را بگذارید

بیشتر بخوانید: پروکسی Docker و WSL2 و توضیح قواعد فرایندی.


مستندات مرتبط

رساندن Docker و WSL2 به پروکسی Clash روی میزبان
استقرار رساندن Docker و WSL2 به پروکسی Clash روی میزبان

نشانی 127.0.0.1 داخل کانتینر همان میزبان نیست. پیکربندی برای هر سه سناریوی Docker — کشیدن تصویر توسط دیمون، زمان ساخت و زمان اجرا — به‌علاوهٔ دو رویکرد برای حالت‌های شبکهٔ متفاوت WSL2.

2026-06-141401 واژه3 دقیقه مطالعه