配置Go程序代理服务器

Go程序可以理解环境变量 http_proxyno_proxy ,但是当使用 go getgo install 都是使用SCM来完成的,所以还需要配置 git配置代理 。目前我实践下来需要以下步骤:

配置go的HTTP代理

  • 配置 http_proxyhttps_proxy 环境变量;

配置代理环境变量
export http_proxy=127.0.0.1:3128
export https_proxy=127.0.0.1:3128
全局配置git使用HTTP/HTTPS代理
git config --global http.proxy http://127.0.0.1:3128

配置go的socks代理

更为简单的方式是采用 SSH Tunneling: 动态端口转发 方式下的 socksh 代理

配置socks代理环境变量
# go设置代理需要设置环境变量以及git的代理

export http_proxy=socks5h://127.0.0.1:1080
export https_proxy=socks5h://127.0.0.1:1080

git config --global http.proxy socks5h://127.0.0.1:1080

备注

我的实践发现在 Ubuntu镜像(纯粹版本) 容器中使用 socks5h 协议会失败,改为 socks5 协议则成功。有点奇怪的是Host主机是正常的

使用官方go代理

上述使用socks代理或http代理都是采用操作系统底层proxy功能,实际上Go内置了专有的代理机制,更为透明且高效。在国内,可以使用 Goproxy.cn 提供的Go模块代理:

使用 goproxy.cn 提供的模块代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

然后就能正常安装Go模块

另外,也能在命令行使用,例如在 Ubuntu镜像(纯粹版本) 制作时在 Dockerfile 中使用:

在Dockerfile中使用代理安装Go模块`
# 使用 GOPROXY 避开复杂的 SOCKS 代理链
RUN GOPROXY=https://goproxy.cn,direct go install golang.org/x/tools/gopls@latest

归档(现在不用了)

警告

我最近一次 Homebrew初始化 实践安装 Colima 遇到问题,似乎通过 alias 方式设置 go 命令没有成功,所以这段设置方法暂时废弃(归档)。实际使用方法暂时以上文设置环境变量 http_proxyhttps_proxy 为准。

HTTP代理

比较简单的方法是在执行 go 命令时直接传递代理配置:

http_proxy=192.168.10.9:3128 go get golang.org/x/tools/gopls@v0.7.1

为了方便使用,可以使用 alias :

alias设置go代理
alias go='http_proxy=192.168.7.9:3128 go'

Socks代理

socks代理:

alias设置go socks代理
alias go='http_proxy=socks5://127.0.0.1:1080 go'

参考