Composer在防火墙后超时主因是DNS解析失败或HTTPS被拦截,需同时配置HTTP_PROXY与HTTPS_PROXY指向同一http协议代理地址,并导入企业根证书或临时禁用TLS验证,同时排查DNS污染。

Composer 在公司防火墙后报 Connection timed out,基本可以确定是 DNS 解析失败或 HTTPS 连接被拦截,而不是单纯“连不上 Packagist”。关键不是换源,而是让 Composer 明确走代理且跳过证书校验(如果企业中间人代理强制重签证书)。
确认是否走对了代理(HTTPS_PROXY 和 HTTP_PROXY 必须同时设)
很多团队只配了 HTTP_PROXY,但 Composer 默认用 HTTPS 访问 https://packagist.org,不设 HTTPS_PROXY 就会直连——而直连在防火墙后必然超时。
-
HTTPS_PROXY和HTTP_PROXY必须指向同一个企业代理地址,格式如http://proxy.company.com:8080(注意协议是http://,不是https://) - Windows 用户需在命令行中运行:
set HTTP_PROXY=http://proxy.company.com:8080 set HTTPS_PROXY=http://proxy.company.com:8080
- Linux/macOS 用户运行:
export HTTP_PROXY=http://proxy.company.com:8080 export HTTPS_PROXY=http://proxy.company.com:8080
- 临时测试可用:
composer config -g http-proxy http://proxy.company.com:8080,但该方式不支持 HTTPS 代理,慎用
绕过企业 SSL 中间人证书(sslmode=disable 不适用,要用 cafile 或禁用验证)
企业代理常使用自签名 CA 或内部根证书重签所有 HTTPS 域名,Composer 默认校验证书会失败,报错里常带 SSL certificate problem: unable to get local issuer certificate,此时单纯设代理还不够。
- 最稳妥:把企业根证书导出为 PEM 文件(比如
/path/to/company-ca.pem),然后告诉 Composer 使用它:composer config -g cafile /path/to/company-ca.pem
- 开发环境临时调试可用(不推荐上生产):
composer config -g disable-tls true
(等价于--no-secure-http,完全降级走 HTTP) - 不要尝试改
openssl.cafilephp.ini 配置——Composer 有自己的证书链逻辑,不读这个
检查 Packagist 域名是否被 DNS 污染或解析异常
有些防火墙会劫持 packagist.org 的 DNS 返回内网不可达 IP,导致连接超时。这不是 Composer 问题,而是网络层解析错误。
- 先手动测 DNS:
nslookup packagist.org或dig packagist.org +short,看返回的 IP 是否合理(正常应是 Cloudflare 的 IP,如104.21.76.139) - 若返回的是
127.0.0.1、10.x.x.x或明显内网段,说明 DNS 被污染,需联系 IT 部门修复,或临时在/etc/hosts(macOS/Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)中硬写:104.21.76.139 packagist.org
- 避免用国内镜像源(如阿里云、腾讯云)替代——它们只是同步源,仍需上游 HTTPS 连接,没解决根本的代理和证书问题
真正卡住的地方往往不是 Composer 配置本身,而是 IT 部门没公开代理的完整使用规则(比如是否需要 NTLM 认证、是否强制要求证书、DNS 是否分域解析)。建议先用 curl -v https://packagist.org/packages.json 复现问题,再逐步加 -x 和 --cacert 参数排查,比直接调 Composer 更快定位到底是代理、DNS 还是证书环节断了。









