Packagist 全量走 HTTPS,仅配 http-proxy 无效,必须同时配置 http-proxy 和 https-proxy(均以 http:// 开头),否则 Composer 会静默直连导致卡在 Loading composer repositories。

只配 http-proxy 为什么还是连不上 Packagist
因为 Packagist 全量走 HTTPS,而 http-proxy 只处理 HTTP 请求;HTTPS 请求必须由 https-proxy 字段触发 CONNECT 隧道,漏掉它,Composer 就会 fallback 到直连——结果就是卡在 Loading composer repositories,没报错、没进度、也没日志提示。
常见错误现象包括:
-
cURL error 35(TLS handshake failed) -
Failed to decode response(实际是空响应,因代理未生效) -
Resolving dependencies长时间无反应
正确做法是两个字段必须同时存在,且协议头不能省:
-
https-proxy的值必须以http://开头,哪怕代理监听的是https://127.0.0.1:8443—— Composer 不支持https://协议的代理地址 - 用户名或密码含
@、/、:,必须 URL 编码,例如pa@ss/word→pa%40ss%2Fword - 执行
composer config -g --list | grep -E "(http|https)-proxy",确认两行都输出且格式合法
镜像源和代理能不能一起用
不能。二者作用层面不同,混配会导致行为不可控:设了 repo.packagist,http-proxy 和 https-proxy 就被完全忽略;开了代理,镜像配置就形同虚设。
典型症状是:
- 明明配了阿里云或腾讯云镜像,却仍卡在
Loading composer repositories - 日志里看不到
Proxy CONNECT,但网络策略又强制所有 HTTPS 流量过代理 - 公司内网访问私有 mTLS 仓库失败,因为镜像不参与 TLS 握手,只有代理能透传 CONNECT
真要用代理,第一步永远是清空镜像:
-
composer config -g --unset repo.packagist(注意不是repos.packagist或packagist.org) - 再配
http-proxy和https-proxy,缺一不可 - 如果公司用 NTLM 代理(如 Windows 域环境),Composer 原生不支持,得用
cntlm或px中转,让 Composer 连本地127.0.0.1:3128
腾讯云/CVM 环境下该选镜像还是代理
绝大多数情况应优先切镜像。你在腾讯云服务器上跑 composer install 卡住,大概率不是网络不通,而是 DNS 解析慢或直连海外节点握手耗时高。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
直接换腾讯云官方镜像,比配代理更稳更快:
-
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/(末尾/不能少) - 立刻执行
composer clear-cache - 验证:
composer show laravel/framework --no-ansi | head -n 3,看到 URL 含mirrors.cloud.tencent.com即生效 - 若项目根目录
composer.json里写了repositories,它会覆盖全局配置,得先删掉或注释掉
代理只在特定场景必要:比如要连公司内部带客户端证书(mTLS)的 Artifactory,或者镜像站本身被策略拦截(比如某些金融内网禁止访问任何外部域名,哪怕镜像也是 HTTPS)。
https-proxy 配对失败的静默表现与验证方法
填错 https-proxy 最难排查,因为它不报错,只是“假装工作”:请求发不出去,或发到错误端口,最终超时、502、或 TLS 握手失败。
典型填错方式:
- 写成
https://127.0.0.1:8080(协议错误) - 写成
127.0.0.1:8080(漏协议头) - 代理进程根本没启动,或防火墙拦了端口
临时验证是否真走代理:
- 加
-n -vvv运行:composer install -n -vvv - 日志里出现
Proxy CONNECT才算成功;没这行,说明代理压根没启用 - 手动用 curl 测试:
curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json,看是否返回 200 - CA 证书问题也常伪装成代理失败:
composer config -g cafile /path/to/your-root.pem指向公司根证书,别用系统默认的ca-bundle.crt
最容易被忽略的是:Windows + WSL2 用户因主机与子系统时间不同步,导致 TLS 握手失败,运行 sudo hwclock -s 同步时间即可解决。

















