Windows终端启用网络代理

很多朋友都会遇到这样一个场景:明明系统代理已经打开了(比如Clash、V2Ray等代理工具已经处于“全局”或“系统代理”模式),但在Windows Terminal或者命令行里执行curlnpm installpip install等命令时,却依然网速龟速,甚至直接报错。

这是怎么回事?难道代理没生效?

其实,Windows系统代理只对图形界面的应用(比如浏览器、微信等)生效。像PowerShell、CMD这类终端窗口,并不会自动继承系统代理的设置,需要我们手动配置环境变量才能让它们走代理。所以今天这篇博客,就和大家聊聊如何解决这个问题,让Windows终端也能顺利走代理。


💡 为什么终端不走系统代理?

在Windows中,“系统代理”本质上是在系统网络设置中注册了一个代理地址(通常是http://127.0.0.1:端口)。大多数桌面软件会主动读取这个设置来使用代理,但命令行工具(如PowerShell、CMD)并不会默认读取系统代理,它们需要通过HTTP_PROXYHTTPS_PROXY这两个环境变量才能知道代理的存在。

所以,我们要做的就是告诉终端:“嘿,你的网络流量应该从这儿走。”


⚙️ 方法一:临时设置代理(适用于当前会话)

如果你只是偶尔需要使用代理,或者需要测试代理是否可用,可以在当前的PowerShell窗口中临时设置环境变量。

1
2
3
$env:HTTP_PROXY = "http://127.0.0.1:10101"
$env:HTTPS_PROXY = "http://127.0.0.1:10101"
$env:NO_PROXY = "localhost,127.0.0.1"

注意10101是本文示例使用的 V2Ray HTTP 代理端口,如果你用的是 Clash、SSR 等其他工具,请换成对应的端口号(比如 Clash 常见端口是7890)。

验证是否生效

在终端执行:

1
curl https://www.google.com

如果能正常返回HTTP响应头,说明代理已经生效。


🛠️ 方法二:永久配置到PowerShell配置文件(推荐)

如果每次打开终端都需要手动输入代理,那未免太麻烦了。我们可以把代理配置写入PowerShell的启动配置文件(Profile),这样每次启动终端都会自动生效。

1. 查看或创建配置文件

在PowerShell中执行:

1
Test-Path $PROFILE
  • 如果返回True,说明配置文件已存在。
  • 如果返回False,执行以下命令创建一个:
1
New-Item -Path $PROFILE -Type File -Force

2. 编辑配置文件

执行以下命令用记事本打开它:

1
notepad $PROFILE

在文件的末尾粘贴以下内容(记得替换端口号):

1
2
3
4
# ========== 代理配置 ==========
$env:HTTP_PROXY = "http://127.0.0.1:10101"
$env:HTTPS_PROXY = "http://127.0.0.1:10101"
$env:NO_PROXY = "localhost,127.0.0.1"

保存文件并重启Windows Terminal,代理就会自动生效。


🎯 方法三:配置代理开关函数(最优雅)

如果你时而需要代理、时而需要直连,不希望一直处于代理状态,可以换一种更灵活的写法——把代理写成一个函数,方便随时开启或关闭。

同样在$PROFILE文件末尾添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
function proxy-on {
$env:HTTP_PROXY = "http://127.0.0.1:10101"
$env:HTTPS_PROXY = "http://127.0.0.1:10101"
$env:NO_PROXY = "localhost,127.0.0.1"
Write-Host "✅ 代理已开启 (127.0.0.1:10101)" -ForegroundColor Green
}

function proxy-off {
Remove-Item Env:HTTP_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:HTTPS_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:NO_PROXY -ErrorAction SilentlyContinue
Write-Host "❌ 代理已关闭" -ForegroundColor Yellow
}

保存后,在终端输入proxy-on就能启用代理,输入proxy-off就能关闭代理,非常灵活。


📦 各工具的独立代理配置

除了环境变量,一些常见的包管理工具也支持独立配置代理,便于更精细地管理。

npm

1
2
npm config set proxy http://127.0.0.1:10101
npm config set https-proxy http://127.0.0.1:10101

pip

1
pip config set global.proxy http://127.0.0.1:10101

Git

1
2
git config --global http.proxy http://127.0.0.1:10101
git config --global https.proxy http://127.0.0.1:10101

🧪 验证代理是否配置成功

用一行命令就能验证你的代理是否真的生效:

1
curl -s https://api.ip.sb/geoip

如果你看到的IP地址显示为你的代理节点所在地(比如香港、日本、美国等),那么恭喜你,代理已经完全生效。


⚠️ 常见问题排查

症状 可能原因与解决
配置后仍然无法访问外网 确认代理软件是否开启,检查端口号是否正确(比如本文示例的 V2Ray 端口10101,Clash 常见端口7890)。
代理软件在“规则模式”下不走终端流量 可以尝试切换到“全局模式”测试,或者检查软件的“允许局域网连接”选项是否开启。
只想清除代理 执行$env:HTTP_PROXY=""$env:HTTPS_PROXY=""即可。
Git报错Failed to connect 确认Git的代理配置是否与你的代理软件端口一致。

💡 写在最后

让Windows终端走代理,核心就是围绕环境变量做文章。只要理解了这个原理,无论是临时设置还是永久配置,都可以信手拈来。

我个人比较推荐在Profile文件中配置proxy-onproxy-off这两个函数,既保留了随时切换的灵活性,又不用在每次开窗口时敲一堆重复命令。如果你也经常在终端里折腾这些工具,不妨试试看~

如果你有更好的方法,也欢迎在评论区分享交流!