Skip to main content

代理设置

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等“套壳”应用也是类似的设置方法。 示例