局域网内不能直接启用 packagist.org 的 HTTPS 源,因其存在 DNS 解析慢、TLS 握手卡顿、防火墙拦截 CONNECT 隧道等网络可达性问题;必须通过镜像或代理解决,且镜像与代理不可共存,需清空一方再配置另一方。

局域网内不能直接启用 packagist.org 的 HTTPS 源
packagist.org 官方源本身是 HTTPS,但你在局域网里“启用”它,实际只是让 Composer 能连上——而默认情况下,它根本连不上。原因不是协议问题,是网络可达性:DNS 解析慢、TLS 握手卡在海外节点、中间防火墙拦截 CONNECT 隧道。所以所谓“启用 HTTPS 源”,本质是解决出站链路问题,而非切换协议。
https-proxy 必须和 http-proxy 同时配置,且值都以 http:// 开头
Composer 对 HTTP 和 HTTPS 请求走完全分离的代理路径:HTTP 请求走 http-proxy,HTTPS 请求必须靠 https-proxy 发起 CONNECT 隧道。Packagist 全量接口(如 https://packagist.org/packages.json)都是 HTTPS,漏掉 https-proxy 就等于让所有元数据请求 fallback 直连。
-
https-proxy的值协议头必须是http://,哪怕你的代理服务监听的是 8443 或启用了 TLS —— 填https://127.0.0.1:8080或127.0.0.1:8080都会静默失效 - 认证信息含
@、/、:必须 URL 编码,例如密码pa@ss/word→pa%40ss%2Fword - 务必加
-g参数,否则只写入当前项目composer.json,换目录即失效 - 验证命令:
composer config -g --list | grep -E "(http|https)-proxy",输出必须有两行且格式合规
镜像源和代理不能共存,选一个就对了
国内用户最常踩的坑:一边配了腾讯云镜像 https://mirrors.cloud.tencent.com/composer/,一边又设 http-proxy。结果是镜像配置优先生效,http-proxy 和 https-proxy 字段被完全忽略——你改了半天代理,日志里压根不出现 Proxy CONNECT。
- 想用代理:先清空镜像
composer config -g --unset repo.packagist - 想用镜像:直接配
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾/) - 验证镜像是否生效:
composer config -g repo.packagist应输出完整 JSON,含"url": "https://mirrors.aliyun.com/composer/" - 换源后必须执行
composer clear-cache,否则旧缓存可能干扰解析
NTLM 代理环境下,Composer 原生不支持,必须加中转层
公司 Windows 域环境常见 407 Proxy Authentication Required 错误,这不是配置写错,是协议不兼容。Composer 不支持 NTLM 认证,填了 http-proxy 也白搭。
- 解决方案:用
cntlm或px在本地起中转代理,监听127.0.0.1:3128并处理 NTLM 认证 - 然后把 Composer 的
http-proxy和https-proxy都设为http://127.0.0.1:3128 - 验证中转层是否工作:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果也报 407,说明中转没配通
真正卡住的地方往往不是配置语法,而是代理字段缺失、镜像与代理混用、或 NTLM 场景下误以为能靠 Composer 自身解决认证——这些点一旦漏掉,composer install 就永远停在 Loading composer repositories,连错误都不报。


















