composer代理配置后仍超时,大概率是http.proxy键名写错、dns未绕过或tls校验未关;必须用http.proxy(非http-proxy),配https代理也走该键,且需验证输出、检查dns与secure-http设置。

代理配置后 Composer 仍超时,大概率是没配对参数、没绕过 DNS 或没关 TLS 校验——不是 timeout 数值调得不够大。
代理配置必须用 http.proxy,不是 http-proxy 或 proxy
Composer v2 只认 http.proxy 这个键名,其他写法(比如漏掉 .proxy、多写一个 s)会静默忽略,不报错也不生效。
- 正确命令:
composer config -g http.proxy http://127.0.0.1:8080(HTTP 代理) - HTTPS 代理也走同一配置项:
composer config -g http.proxy https://127.0.0.1:8080 - 验证是否生效:
composer config -g http.proxy应直接输出代理地址;若为空,说明配置失败 - 代理失效常见原因:代理进程未运行、端口被占用、认证凭据缺失(需写成
http://user:pass@127.0.0.1:8080)
代理环境下 http.timeout 失效?先确认是否卡在 DNS 解析
即使开了代理,Resolving dependencies 阶段仍可能走系统 DNS 查询(而非代理),导致卡住。这不是 timeout 能解决的。
- 现象:
composer install -vvv最后一行停在Resolving dependencies,且dig packagist.org @8.8.8.8无响应 - 临时绕过:加环境变量强制跳 DNS 查找:
COMPOSER_DISABLE_NETWORK=1 composer install(仅限离线已有缓存场景) - 更稳妥方案:改用代理支持的 DNS(如
http://127.0.0.1:53),或让代理本身处理 DNS(如 Clash 的dns: enable: true) - 注意:
http.timeout只控制 HTTP 请求耗时,DNS 失败发生在它之前,设再大也没用
secure-http false 在代理中常是必要操作
某些代理(尤其是 MITM 类)会拦截 HTTPS 请求并替换证书,触发 Composer 的 TLS 校验失败,表现为 unable to get local issuer certificate 或连接中断。
- 临时关闭校验:
composer config -g secure-http false - 仅限开发机使用,生产环境必须恢复:
composer config -g secure-http true - 替代方案:把代理的根证书导入系统信任库,再配置 PHP 的
curl.cainfo指向该证书路径 - 验证是否起效:运行
composer diagnose,看 “secure-http” 一行是否显示 “OK”
代理 + 镜像源组合使用时,URL 协议和末尾斜杠不能错
用了代理还切了阿里云镜像,但依然下载慢或失败?大概率是镜像 URL 写错了——代理转发时协议/路径不匹配会导致 400 或连接重置。
- 正确镜像配置:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾/) - 错误示例:
https://mirrors.aliyun.com/composer(缺斜杠)、http://(非 HTTPS)、https://mirrors.aliyun.com/composer//(双斜杠) - 代理日志里若出现
CONNECT mirrors.aliyun.com:443 HTTP/1.1后无响应,基本就是 URL 解析异常 - 调试建议:用
curl -x http://127.0.0.1:8080 https://mirrors.aliyun.com/composer/packages.json手动测通路
代理配置最易被忽略的点:它不自动接管 DNS,也不默认信任自签名证书,更不会帮你修镜像 URL 的斜杠。三者任一出错,timeout 调到 3600 秒也白等。











