Composer默认不读取系统HTTP代理,必须用composer config -g命令显式配置http-proxy和https-proxy参数,且https-proxy也需用http://协议;NTLM代理需通过cntlm等工具中转。

Composer 默认不读取系统 HTTP 代理,直接设 http_proxy 环境变量也不生效——必须显式配置 Composer 自己的代理参数。
用 config 命令全局设置 HTTP/HTTPS 代理
Composer 的代理配置是独立于系统环境变量的,需通过其内置命令写入配置文件(通常是 ~/.composer/config.json)。执行以下两条命令即可:
composer config -g http-proxy http://your-proxy:portcomposer config -g https-proxy http://your-proxy:port
注意:https-proxy 的值也必须是 http:// 协议(不是 https://),即使目标仓库走 HTTPS;这是 Composer 的设计限制。如果代理需要认证,写成 http://user:pass@your-proxy:port,但密码里含特殊字符(如 @、/)必须 URL 编码。
代理配置只对当前用户生效?如何让所有项目都走代理
-g(global)参数已确保写入全局配置,所有项目都会继承。不需要在每个项目里重复运行 composer config。验证方式:运行 composer config -g --list,检查输出中是否包含 http-proxy 和 https-proxy 项。若看到 proxy(无 s)字段,那是旧版写法,已被弃用,优先以 http-proxy 和 https-proxy 为准。
公司内网走 NTLM 代理时 Composer 报错 407 Proxy Authentication Required
Composer 原生不支持 NTLM 认证,无法直接连 Windows 域代理。常见错误信息包括:Failed to open stream: Unable to connect to http://repo.packagist.org 或明确的 407。此时不能靠改 Composer 配置解决,必须换方案:
- 用
cntlm或px这类本地代理工具做 NTLM 中转,再让 Composer 连本地127.0.0.1:3128 - 确认公司是否提供免认证的 HTTP 代理出口(有些内网有 bypass 专用代理)
- 临时关闭代理走直连(仅限测试或小范围白名单场景)
绕过代理的临时命令:composer config -g http-proxy '' && composer config -g https-proxy '',记得后续恢复。
代理配置本身很简单,真正卡住人的几乎全是认证类型不匹配或误信“设了环境变量就自动生效”——Composer 不看 HTTP_PROXY,只认自己配置里的 http-proxy 字段。










