换了国内镜像还是慢?代理和镜像的区别,以及真正的瓶颈在哪

· 约 3 分钟 🪞 国内镜像源

换了镜像源,下载还是慢——这是开发环境配置时最常见的困惑。问题不总在镜像本身,可能是配置没生效、包没同步、或者瓶颈根本不在包下载这一步。

镜像 vs 代理:先搞清楚用的是哪种

镜像(Mirror):
你 → 国内镜像服务器(已有副本)→ 直接返回
速度:快,延迟低,不依赖境外网络

代理(Proxy):
你 → 代理服务器 → 境外官方源 → 代理转发回来
速度:取决于代理出口带宽,通常比直连好但不如镜像

最常见的错误:同时设了 HTTP_PROXY(翻墙代理)和镜像源,结果镜像域名的请求也走了代理,绕了一大圈反而变慢。

排查是否走了代理:

# 看当前环境变量
echo $HTTP_PROXY $HTTPS_PROXY $ALL_PROXY

# 临时取消代理测试
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
pip install somepackage -i https://mirrors.aliyun.com/pypi/simple/

pip 换源

永久生效

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config set global.trusted-host mirrors.aliyun.com

手动编辑配置文件

~/.config/pip/pip.conf(Linux/macOS)或 %APPDATA%\pip\pip.ini(Windows):

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com

验证生效

pip config list
# 应显示:global.index-url = https://mirrors.aliyun.com/pypi/simple/

pip install requests -v 2>&1 | grep "Looking in indexes"
# 应显示镜像地址

常用 PyPI 镜像

镜像地址
阿里云https://mirrors.aliyun.com/pypi/simple/
腾讯云https://mirrors.cloud.tencent.com/pypi/simple/
清华大学https://pypi.tuna.tsinghua.edu.cn/simple/
中科大https://pypi.mirrors.ustc.edu.cn/simple/

npm / pnpm 换源

# npm 永久换源
npm config set registry https://registry.npmmirror.com

# pnpm 永久换源(共用 ~/.npmrc)
pnpm config set registry https://registry.npmmirror.com

# 验证
npm config get registry

# 单次使用镜像
npm install --registry=https://registry.npmmirror.com

postinstall 下载二进制的坑

Puppeteer、Electron、node-sass 等在 npm install 后还会下载平台二进制,这不走 npm 镜像:

# Puppeteer
npm config set PUPPETEER_DOWNLOAD_HOST https://npmmirror.com/mirrors

# Electron
npm config set ELECTRON_MIRROR https://npmmirror.com/mirrors/electron/

# node-sass
npm config set sass_binary_site https://npmmirror.com/mirrors/node-sass/

Maven 换源

~/.m2/settings.xml

<settings>
  <mirrors>
    <mirror>
      <id>aliyun</id>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
</settings>

验证:mvn help:effective-settings | grep url,应该看到镜像 URL。

注意<mirrorOf>central</mirrorOf> 只代理 Maven Central,如果项目用了 Spring、JBoss 等其他仓库,需要单独配置或用 <mirrorOf>*</mirrorOf>(代理所有,但可能导致私有仓库也被代理)。

Go 换源

# 永久设置(写入 GOENV)
go env -w GOPROXY=https://goproxy.cn,direct

# direct 是回退策略:镜像没有时直连官方
# 验证
go env GOPROXY

Cargo(Rust)换源

~/.cargo/config.toml

[source.crates-io]
replace-with = "ustc"

[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

换源后还是慢的排查清单

1. 确认配置文件路径正确(用户级 vs 项目级)
2. 确认没有代理环境变量覆盖(echo $HTTP_PROXY)
3. ping 镜像域名,看延迟和是否可达
4. 检查包是否在镜像里存在(新包同步有延迟)
5. 看是否有 postinstall 脚本在下载二进制(npm/pip 详情日志)
6. CI 环境检查是否缓存了依赖目录

配套工具

❓ 常见问题

镜像源和代理有什么区别?

镜像是在国内服务器存了一份副本,代理是帮你转发请求到境外。镜像(Mirror):把境外仓库的包定期同步到国内服务器,你下载的是国内的副本,速度快、稳定,但同步有延迟(新包可能还没同步)。代理(Proxy):你的请求先到代理服务器,再由代理转发到境外,速度取决于代理服务器的出口带宽,比直连强但不如镜像快。常见误区:把 HTTP_PROXY 环境变量设置成翻墙代理,然后再配镜像源——两者叠加,实际走的还是代理路线,镜像配置形同虚设。

pip 怎么换源?换源后怎么验证生效了?

一次性换源(写入配置文件)pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/。验证:pip config list 看 global.index-url 是否已更新;或 pip install somepackage -v 看输出里的 URL 是否是镜像地址。临时换源(只用一次)pip install somepackage -i https://mirrors.aliyun.com/pypi/simple/pip.ini / pip.conf 手动写法(Windows 在 %APPDATA%\pip\pip.ini,Linux/macOS 在 ~/.config/pip/pip.conf):``[global]\nindex-url = https://mirrors.aliyun.com/pypi/simple/\ntrusted-host = mirrors.aliyun.com``

npm 换源后 install 还是慢,可能是什么原因?

三个常见原因:(1) 包本身在镜像里没有——私有包、新发布的包可能还没同步;npm 默认行为是 fallback 到官方源,速度取决于你能否访问 npmjs.com;(2) postinstall 脚本下载二进制——Puppeteer、Electron、node-sass 等包在 install 后会运行脚本从 GitHub Releases 下载平台相关的二进制文件,这个下载不走 npm 镜像;解决:单独配置 PUPPETEER_DOWNLOAD_HOSTELECTRON_MIRROR 等环境变量;(3) lock 文件里锁定了 resolved URL——package-lock.json 里的 resolved 字段如果是 registry.npmjs.org 开头,即使换了 npm 源也会从那个 URL 下载;删掉 lock 文件重新 install 或用 npm install --registry=镜像地址

Maven 换源后第一次 build 还是很慢,是正常的吗?

正常,第一次要从镜像下载所有依赖到本地缓存(~/.m2/repository)。Maven 的工作方式是"下载到本地仓库,后续从本地直接用"——第一次必须全部下载,之后就算断网也能 build(只要依赖没变)。加速第一次 build 的方法:(1) 用公司内网 Nexus/Artifactory 私服(已提前同步常用依赖);(2) 使用 mvn dependency:go-offline 预下载所有依赖;(3) 在 CI 环境里缓存 ~/.m2/repository(GitHub Actions 的 cache action)。第二次之后如果还慢,检查 settings.xml 里 mirror 配置是否正确。

各个工具的镜像配置在哪个文件?

各工具配置文件位置:pip → ~/.config/pip/pip.conf(Linux/macOS)或 %APPDATA%\pip\pip.ini(Windows);npm → ~/.npmrc(用户级)或项目根目录 .npmrc(项目级);yarn → ~/.yarnrc.yml(Yarn 2+)或 ~/.yarnrc(Yarn 1);pnpm → ~/.npmrc(和 npm 共用);Maven → ~/.m2/settings.xml;Gradle → ~/.gradle/init.gradle 或项目 build.gradle;Go → 环境变量 GOPATH 下的配置,或 go env -w GOPROXY=...;Cargo(Rust)→ ~/.cargo/config.toml;Composer(PHP)→ ~/.config/composer/config.json 或项目 composer.json

🪞 打开 国内镜像源 pip/npm/Ubuntu/Docker 等 17 个工具·清华/阿里/华为/腾讯 8 大源·一键复制配置命令