结论先说:Git 与 npm 虽常在同一项目中使用,却有各自的配置层。Git 可使用 http.proxy、remote.<name>.proxy 或标准代理环境变量;npm 支持 proxy、https-proxy 及相关环境变量。应按仓库或单次进程设置最小范围,避免把带密码的代理 URL 写入可提交的配置文件。
本文更新于 2026 年 8 月 24 日,面向已获得网络与目标系统授权的开发、测试和企业接入场景。软件版本、平台规则与供应商能力会变化,上线前请核对官方文档,并在测试环境完成回归。
Git 与 npm 代理配置对比
| 工具 | 推荐最小范围 | 验证命令 | 常见失败 |
|---|---|---|---|
| Git HTTPS | 单仓库或单remote | git ls-remote / GIT_CURL_VERBOSE | 407、证书、错误全局配置 |
| Git SSH | SSH自身ProxyCommand配置 | ssh -vT或只读fetch | 把http.proxy误用于SSH |
| npm | 单次环境变量或用户级配置 | npm ping / npm doctor | registry、CA、超时 |
| CI/CD | Job级Secret与临时环境 | 脱敏日志、出口与依赖校验 | 凭据回显或写进缓存 |
先看远程地址:HTTPS 与 SSH 不是同一条代理路径
执行 git remote -v 确认 URL。以 https:// 开头的远程通常使用 Git 的 HTTP 配置;以 git@host: 或 ssh:// 开头则走 SSH,http.proxy 不会自动解决 SSH 链路。
团队排障时先固定一个只读动作,例如 git ls-remote,避免在网络不稳定时直接 push。若只有 SSH 失败,可评估改用 HTTPS,或依据组织网络政策配置 SSH 的 ProxyCommand,不要混用两套参数。
Git:优先缩小到单仓库或单 remote
Git 官方支持 http.proxy,也支持 remote.<name>.proxy 为单一远程指定代理。全局设置适合明确的企业统一出口,但个人开发机更容易遗忘并影响所有仓库。
# 仅当前仓库
git config http.proxy http://user@proxy.example:8000
# 仅 origin(Git HTTPS/FTP remote)
git config remote.origin.proxy http://user@proxy.example:8000
# 清理当前仓库配置
git config --unset http.proxy
示例不把密码写入 URL。Git 文档说明仅提供用户名时可尝试通过凭据机制获取密码;实际可用性取决于代理认证方式与本机凭据管理器。
npm:区分 registry、proxy 与 https-proxy
先用 npm config get registry 确认正在访问的仓库,再查看 npm config get proxy 与 npm config get https-proxy。npm 官方配置也会考虑 HTTP_PROXY、HTTPS_PROXY 等环境变量。
短期排障可用单次进程环境变量;长期配置可写用户级 .npmrc,但不要把含凭据的用户配置复制进项目或镜像。npm ping 可测试当前 registry,npm doctor 会检查 registry 连通等基础环境,但都不能替代真实项目安装回归。
407 与证书错误必须分开处理
- 407:代理要求或拒绝鉴权,核对账号、密码、白名单、认证方案与特殊字符编码。
- 证书链错误:核对系统 CA、企业代理 CA、npm 的
cafile以及 Git/cURL 使用的证书库。 - 超时:分别测代理端口、目标仓库、DNS 与大包下载,不要无限增加重试。
- 404/权限错误:先确认 registry、包名、仓库权限和令牌范围,不要归咎于 IP。
npm 的 strict-ssl 默认开启。长期关闭证书校验会掩盖中间人风险,不应作为生产解决方案。
安全清理与CI验收
- 搜索项目、用户配置、CI变量和构建日志中是否出现完整代理 URL。
- 对 Git 和 npm 分别执行只读测试,记录出口、状态和耗时。
- 验证
NO_PROXY中的内部 Git、registry 与缓存地址是否按预期直连。 - 任务结束后清除临时配置和环境变量,必要时轮换已暴露凭据。
- 把网络错误与依赖完整性错误分开告警,避免自动切换出口掩盖真实故障。
固定出口能让下载路径与第三方白名单更可控,但不能替代仓库身份认证、包完整性校验和最小权限令牌。
常见问题(FAQ)
Git 设置 http.proxy 后,SSH 地址会生效吗?
不会自动生效。SSH 远程使用 SSH 自身的网络与代理配置,先检查 remote URL。
npm 应设置 proxy 还是 https-proxy?
取决于registry和请求协议。现代registry通常是HTTPS,仍应按官方配置和实际请求验证,不要只设置一个后猜测。
可以把账号密码写进项目 .npmrc 吗?
不建议。项目文件可能被提交、打包或进入日志;使用用户配置、环境变量或Secret管理,并限制作用范围。
为什么配置代理后出现 unable to get local issuer certificate?
这属于证书信任链问题。核对企业代理CA和工具使用的CA文件,不要用关闭strict-ssl作为长期方案。
参考资料与延伸阅读
站内相关阅读:代理407错误排查、curl静态住宅代理配置、代理延迟与稳定性测试。
