必须同时配置http-proxy和https-proxy,否则composer install会卡在“loading composer repositories”,因packagist全量使用https,而composer仅对http请求默认走http-proxy,https请求需显式设置https-proxy才生效。

composer config -g http-proxy 和 https-proxy 必须同时设
只配 http-proxy,composer install 仍会卡在 “Loading composer repositories”,因为 Packagist 全量走 HTTPS,而 Composer 默认只对 HTTP 请求用 http-proxy,HTTPS 请求必须显式配 https-proxy 才生效。
这两项都得是 http:// 开头(哪怕代理本身支持 HTTPS),例如:composer config -g http-proxy http://10.1.1.100:8080composer config -g https-proxy http://10.1.1.100:8080
- 漏掉
https-proxy是内网最常见卡住原因,diagnose输出里 “https connectivity to packagist.org: OK” 会直接失败 - 代理带认证时,用户名密码要 URL 编码,比如
user%40domain:P%40ssw0rd@10.1.1.100:8080 - Windows 下协议名必须小写,
HTTP://会被忽略 - 配置后用
composer config -g --list | grep proxy确认是否写入成功
为什么 curl -x 验证比看 Composer 日志更靠谱
Composer 报错很安静:不连上、不报错、只是卡住或超时。它不会告诉你“代理连不上”,只会抛出模糊的 cURL error 60 或静默等待。真正能定位问题的是绕过 Composer,直接模拟它的请求链路。
执行这行命令,就能复现 Composer 访问 Packagist 的真实行为:curl -x http://127.0.0.1:8080 -I https://packagist.org/packages.json
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 返回
200 OK→ 代理通,问题在 Composer 配置或证书信任 - 返回
Connection refused→ 本地代理进程没开,或端口填错 - 返回
502 Bad Gateway→ 代理服务本身无法转发 HTTPS 请求(常见于只支持 HTTP 的代理) - 返回
SSL certificate problem→ 企业中间人代理的 CA 证书未被 PHP/cURL 信任,需手动导入
NTLM 代理下 composer 报 407 的唯一解法
Composer 原生不支持 NTLM 认证,设了 http-proxy 也白搭,必报 407 Proxy Authentication Required。这不是配置问题,是协议不兼容。
必须用本地中转代理把 NTLM 转成普通 HTTP 代理,再让 Composer 连这个中转地址:
- Windows 推荐
cntlm,配置好域账号后监听127.0.0.1:3128 - macOS/Linux 可用
px或microproxy - 然后只配
composer config -g http-proxy http://127.0.0.1:3128和同地址的https-proxy - 别试图在
auth.json里塞 NTLM 凭据——Composer 不读这个
代理和镜像源不能共存,选一个就对了
有人既配了 https-proxy,又运行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,结果反而更慢甚至失败。因为镜像源是直连内网可达地址,加代理等于多绕一跳,还可能触发证书校验冲突。
- 用镜像源(如阿里云、腾讯云、公司私有镜像)→ 清掉所有
*-proxy配置,专注验证 DNS 和直连连通性 - 用代理 → 关闭镜像配置,确保
repo.packagist.org没被额外重写 - CI/CD 环境尤其要注意:镜像源更适合批量构建,代理更适合开发机临时调试
真正难的不是命令怎么敲,而是分清当前网络策略到底属于哪一类:是纯出口限制(靠代理)、DNS+连接双堵(靠镜像)、还是认证层拦截(靠中转)。混着用只会掩盖真实瓶颈。










