go代理配置唯一关键项是goproxy,必须设为带末尾斜杠的https地址(如https://nexus.example.com/repository/goproxy/),nexus需启用go-proxy类型仓库并配置remote为https://proxy.golang.org/,私有模块还需goprivate配合go-hosted仓库。

Go 代理配置必须用 GOPROXY,不是 go env -w GO111MODULE
很多人配 Nexus 前先狂改 GO111MODULE 或 GOPRIVATE,结果模块拉不下来——这两者和代理本身无关。GOPROXY 才是 Go 客户端决定“去哪找 .mod/.zip”的唯一开关。
正确做法是直接设代理地址,Nexus 的 Go 代理仓库默认路径是 https://nexus.example.com/repository/goproxy/(注意末尾斜杠不能少):
go env -w GOPROXY=https://nexus.example.com/repository/goproxy/
- 必须带协议(
https://),HTTP 会被 Go 拒绝(除非加,direct并启用GONOSUMDB) - 末尾
/缺失会导致 404:Go 会拼出.../goproxy/github.com%2Fxxx%2Fyyy/@v/v1.2.3.mod,没斜杠就变成.../goproxygithub.com%2F... - 如果 Nexus 启用了身份验证,Go 不支持在 URL 里写用户名密码(
https://u:p@...),得靠 Nexus 配置 IP 白名单或反向代理透传认证头
Nexus 必须启用 Go Proxy 仓库类型,不能只建 Group 或 Hosted
Nexus 默认不带 Go 仓库支持。装完插件后,新建仓库时选错类型是高频失败原因:选 group 或 hosted 都不行,必须选 proxy 类型,并把 Remote storage location 设为官方代理地址 https://proxy.golang.org/。
关键配置项(UI 路径:Repository → Create repository → go-proxy):
立即学习“go语言免费学习笔记(深入)”;
-
Remote storage location:填https://proxy.golang.org/(别用https://goproxy.io,后者已停服) -
Content type:保持默认Go,不要切到raw -
Auto-block和Block on failure建议关掉,否则上游短暂不可用会导致整个私有代理挂掉 - 如果企业防火墙禁止直连外网,得在 Nexus 服务器上配好系统级代理(
http_proxy环境变量),仅 UI 里填 remote 地址没用
私有模块要能拉,GOPRIVATE + Nexus Hosted 仓库缺一不可
公司内部模块(如 gitlab.corp/internal/pkg)不会走 GOPROXY,Go 默认回源 VCS。想让它也经 Nexus 缓存/分发,得两步走:
- 在客户端设
GOPRIVATE=gitlab.corp/internal/*,告诉 Go “这些域名不走代理,直接 git clone” - 在 Nexus 里另建一个
go-hosted类型仓库(比如叫go-internal),然后用go list -m+go build触发上传,或手动curl -X PUT推送.mod和.zip - 最后把
go-internal加进go-group仓库(类型为group),再把 group 地址设为GOPROXY,才能统一入口 - 注意:Hosted 仓库不自动解析
go.sum,go mod download时若校验失败,得确认 Nexus 是否启用了Strict Content Validation(建议关)
调试 403/404 错误时,优先看 Nexus access.log 和 Go 的 -v 输出
常见错误不是配置漏了,而是权限链断在某个环节:
-
403 Forbidden:90% 是 Nexus 的匿名用户没被赋予nx-repository-view-go-*-read权限,检查角色绑定;不是仓库没开匿名访问 -
404 Not Found:先跑go get -v example.com/foo@v1.2.3,看最后一行请求的 URL;再对照 Nexus access.log 里是否真收到了该请求(路径含@v/或@latest) - 如果 Nexus 日志完全没记录,说明请求根本没到 Nexus——检查客户端
GOPROXY是否拼错、是否被 IDE(如 GoLand)的独立环境变量覆盖、或~/.netrc里写了冲突的凭据 - 代理链过长(比如 Nexus → CDN → 外网)时,
User-Agent: Go-http-client/1.1可能被中间层拦截,需在 Nexus 的 reverse proxy 设置里显式透传
真正卡住的地方,往往是 Nexus 权限模型和 Go 的模块路由规则交叉作用的结果,而不是单点配置问题。










