Git 和 npm 怎么配置静态住宅代理:HTTPS、NO_PROXY、凭据与证书排查

结论先说: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 proxynpm config get https-proxy。npm 官方配置也会考虑 HTTP_PROXYHTTPS_PROXY 等环境变量。

短期排障可用单次进程环境变量;长期配置可写用户级 .npmrc,但不要把含凭据的用户配置复制进项目或镜像。npm ping 可测试当前 registry,npm doctor 会检查 registry 连通等基础环境,但都不能替代真实项目安装回归。

407 与证书错误必须分开处理

  • 407:代理要求或拒绝鉴权,核对账号、密码、白名单、认证方案与特殊字符编码。
  • 证书链错误:核对系统 CA、企业代理 CA、npm 的 cafile 以及 Git/cURL 使用的证书库。
  • 超时:分别测代理端口、目标仓库、DNS 与大包下载,不要无限增加重试。
  • 404/权限错误:先确认 registry、包名、仓库权限和令牌范围,不要归咎于 IP。

npm 的 strict-ssl 默认开启。长期关闭证书校验会掩盖中间人风险,不应作为生产解决方案。

安全清理与CI验收

  1. 搜索项目、用户配置、CI变量和构建日志中是否出现完整代理 URL。
  2. 对 Git 和 npm 分别执行只读测试,记录出口、状态和耗时。
  3. 验证 NO_PROXY 中的内部 Git、registry 与缓存地址是否按预期直连。
  4. 任务结束后清除临时配置和环境变量,必要时轮换已暴露凭据。
  5. 把网络错误与依赖完整性错误分开告警,避免自动切换出口掩盖真实故障。

固定出口能让下载路径与第三方白名单更可控,但不能替代仓库身份认证、包完整性校验和最小权限令牌。

常见问题(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静态住宅代理配置代理延迟与稳定性测试