composer下载失败90%因未走代理,根本原因是环境变量名必须全大写带下划线(http_proxy/https_proxy),且值须为http://协议;小写、缺协议或仅配composer config -g http-proxy均无效。

Composer 下载失败,90% 不是代理没配,而是根本没走代理——你看到的 composer install 卡在 Downloading https://packagist.org/...,说明它压根没读你的代理设置,还在直连国外源。
为什么 http_proxy 环境变量不生效
Composer 默认只认 HTTP_PROXY 和 HTTPS_PROXY(全大写、带下划线),且必须协议明确、端口完整。小写或缺协议会被忽略:
-
http_proxy=http://127.0.0.1:8888→ 静默失效 -
HTTP_PROXY=http://127.0.0.1:8888→ 仍可能失败(HTTP 代理无法转发 HTTPS 请求) -
HTTPS_PROXY=https://127.0.0.1:8888→ 错误:HTTPS 代理不合法,cURL 拒绝连接 - 正确写法:
HTTP_PROXY=http://127.0.0.1:8888+HTTPS_PROXY=http://127.0.0.1:8888(注意都是http://)
验证是否加载成功:env | grep -i proxy,必须同时看到两个变量且值匹配。
composer config -g http-proxy 配了等于没配
这个配置项只影响 Composer 自身的 HTTP 请求(比如 composer self-update),**完全不控制包下载行为**。包下载走的是 cURL 底层,只响应系统级环境变量或 php.ini 中的 curl.cainfo 和代理设置。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 执行
composer config -g http-proxy http://127.0.0.1:8888后,composer diagnose不会显示任何 proxy 相关信息 - 日志里依然出现
Downloading https://packagist.org/...,证明代理未介入 - 真正起作用的是:
export HTTP_PROXY=http://127.0.0.1:8888(Linux/macOS)或set HTTP_PROXY=http://127.0.0.1:8888(Windows CMD)
代理能连但下载仍失败?检查证书和 TLS 版本
很多本地代理(如 Charles、Fiddler、Clash 的 TUN 模式)会中间人劫持 HTTPS 流量,导致 Composer 校验失败,报错 cURL error 60 或 SSL certificate problem。
- 临时绕过(仅调试):
composer config -g disable-tls true,但必须配合HTTP_PROXY才有效 - 长期方案:把代理的根证书导出为 PEM,告诉 Composer 使用它:
composer config -g cafile /path/to/proxy-ca.pem - PHP cURL 若编译时用的是旧版 OpenSSL(
验证代理是否真转发了包请求:curl -v -x http://127.0.0.1:8888 https://mirrors.tuna.tsinghua.edu.cn/composer/packages.json。如果返回 200,说明代理通;如果卡住或报 503,问题在代理本身。
代理 + 镜像混用时最危险的坑
你既设了 HTTP_PROXY,又配了清华镜像:composer config -g repositories.packagist.org '{"type": "composer", "url": "https://packagist.mirrors.ustc.edu.cn/"}',结果反而更慢甚至失败。
- 原因:镜像站启用 HTTP/2 或 CDN 调度,代理可能不兼容,导致连接复用异常或 header 被篡改
- 表现:
composer require monolog/monolog -vvv日志里反复出现Resolving卡顿,或Connection reset by peer - 解法:二选一,别混用。国内用户优先关代理、直连镜像;企业内网必须走代理时,则禁用镜像,让所有流量经代理走官方源(并确保代理能稳定穿透 SNI)
最后提醒:代理配置不会覆盖项目级 repositories 字段,只要 composer.json 里有 "repositories",全局代理和镜像都会被跳过——先 grep -A 10 '"repositories"' composer.json 看清结构再说。










