直接配 GitHub Personal Access Token 就能解决,不是镜像问题,也不是网络问题——没配 token,换啥镜像都白搭。Composer 在解析 dev-main、dev-master、私有仓库等时直连 api.github.com,默认每小时限速60次,需配置带 repo 权限的 token 并通过 composer config --global github-oauth.github.com <token> 全局绑定,权限设为600且验证 rate.limit 为5000才算生效。

直接配 GitHub Personal Access Token 就能解决,不是镜像问题,也不是网络问题——没配 token,换啥镜像都白搭。
为什么 composer install 会报 rate limit exceeded
Composer 在解析 dev-main、dev-master、私有仓库、fork 后没改 "source" 的包,或依赖未收录到 Packagist 时,会直连 https://api.github.com/。这些请求默认不带认证头,GitHub 按 IP 计数,每小时最多 60 次。CI 环境、公司出口 IP、多人共用机器,分分钟撞墙。
- 错误日志里常出现
403 Forbidden或API rate limit exceeded - 卡在
Resolving packages阶段,不是网络慢,是 API 被拒了 - 镜像(如腾讯云、阿里云)只代理
packagist.org元数据和 ZIP 下载,完全不碰api.github.com
怎么正确配置 github-oauth.github.com token
必须用 composer config --global github-oauth.github.com <token>,少一个字符都不行。这个命令把 token 写进 ~/.composer/auth.json,所有项目自动继承。
- Token 必须勾选
repo(不是仅public_repo),否则访问 fork 库或组织库会失败 - Linux/macOS 下立刻执行
chmod 600 ~/.composer/auth.json,权限不对 Composer 会静默忽略 - Windows 用户在 PowerShell 里粘贴 token,建议加单引号包裹,避免
$符号被截断 - 验证是否生效:运行
composer config --global github-oauth.github.com,应输出掩码后的前几位;再跑composer install -v,日志里出现Using GitHub token from configuration才算真正启用
常见失效场景和排查点
配了 token 却还报限速,大概率是环境没对齐,不是 token 本身无效。
- 执行
composer config --global的用户 ≠ 运行composer install的用户(比如 CI 里用root配,但构建跑在www-data下) - 项目根目录下存在
auth.json,它会覆盖全局配置;用composer config --list查看实际生效位置 - 公司代理或防火墙拦截了
Authorization请求头,token 根本没发出去;可单独验证:curl -H "Authorization: token <your_token>" https://api.github.com/rate_limit,返回中rate.limit应为5000 - PHP 禁用了
curl或 SSL 验证失败(某些旧版 CentOS 常见),导致认证头无法发出
最易被忽略的是权限和作用域——auth.json 权限不是 600,或者 token 没勾 repo,其他步骤全对也白费。



















