代理设置
tip
中国的IT从业者,职业生涯中至少有三分之一的时间是在跟GFW斗智斗勇!
通用代理环境变量
export http_proxy="http://user:pass@proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
- 变量名通常不区分大小写,不过有些旧版本的软件可能会要求使用大写变量名;
- 这两个变量可以解决大部分问题,越是高版本的操作系统,对环境变量的支持越完善;
- 代理最好是支持“分流”的,这样可以把这两个环境变量设置在
.bashrc
或者.profile
文件中;
还有一个all_proxy
变量,貌似并不常用。
临时代理设置
如果不想使用export
设置通用代理环境变量,可以再启动某个命令/应用时,临时指定代理环境变量
https_proxy=http://127.0.0.1:1080 [要运行的命令或者应用]
# 示例
http_proxy=http://127.0.0.1:1080 curl ipinfo.io
如果要运行的是一个比较复杂的脚本(.sh),这种方式大概率不会生效,因为脚本中可能包含多个命令、管道、输出输出重定向等。
针对具体应用的代理设置
不是所有的应用都会自动识别使用通用代理环境变量。
curl
curl ipinfo.io -x http://127.0.0.1:1080
# 一般来说也可以自动识别通用代理环境变量,不需要使用`-x`参数
wget
自动识别使用通用代理环境变量,不需要设置代理相关参数。
debian/ubuntu apt
理论上可以使用通用代理环境变量,但是如果使用了sudo
,会导致通用代理环境变量失效.
# 将通用代理环境变量“传递到”sudo命令中使用
export http_proxy="http://proxy.example.com:8080"
sudo -E apt update
docker
通过代理pull镜像
创建/修改配置文件:/etc/docker/daemon.json
{
"proxies": {
"http-proxy": "http://10.100.1.7:10080",
"https-proxy": "http://10.100.1.7:10080",
"no-proxy": "ksyunkcr.com,ksyuncs.com,127.0.0.0/8"
},
"data-root": "/DATA/disk1/docker_data"
}
注意: 如果同时连接到公司内部仓库、本地仓库或者没有被GFW的仓库,务必正确设置no-proxy
!
构建镜像时通过代理下载依赖
使用--build-arg
传入代理设置变量
docker build --build-arg https_proxy="http://10.100.1.7:10080" -t demo/vscode:latest .
python pip
可以自动识别使用通用代理环境变量,也提供了独立的代理设置参数
pip install [要安装的包名] --proxy=http://user:password@proxyserver:port
uv
自动识别使用通用代理环境变量,同时也支持--proxy
参数。
node.js npm
# 临时设置代理
npm --proxy=http://127.0.0.1:8080 install package-name
npm --https-proxy=http://127.0.0.1:8080 install package-name
# 永久设置代理
npm config set proxy http://127.0.0.1:8080
npm config set https-proxy http://127.0.0.1:8080
# 查看代理设置
npm config get proxy
npm config get https-proxy
# 取消代理设置
npm config delete proxy
npm config delete https-proxy
永久代理设置其实是将代理信息写入到配置文件中:~/.npmrc
pnpm
会自动共享npm
的设置,包括:pnpx
, npx
。
git
通过SSH协议访问GitHub(pull & push),在~/.ssh/config
中添加
Host github.com
HostName github.com
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
vscode
在设置中搜索proxy,填写proxy服务器地址。cursor等“套壳”应用也是类似的设置方法。