Composer 全局代理必须同时配置 http-proxy 和 https-proxy,且 https-proxy 值须为 http:// 开头;NTLM 代理需用 cntlm/px 中转;项目级 repositories 会覆盖全局配置;换源后须清缓存、删 vendor/ 和 composer.lock。

composer config -g 必须同时配 http-proxy 和 https-proxy
只设 http-proxy,Composer 依然会卡在 Loading composer repositories——因为 Packagist、GitHub 等全部走 HTTPS,而 http-proxy 只管 HTTP 请求,HTTPS 请求必须靠 https-proxy 建立 CONNECT 隧道。
https-proxy 的值必须是 http:// 开头(哪怕代理本身监听 TLS 端口),填成 https://127.0.0.1:8080 或漏协议头(如 127.0.0.1:8080)会导致静默 fallback 直连,最终超时或 502。
- 正确写法:
http://user:pass@127.0.0.1:8080 - 密码含
@、/、:必须 URL 编码,例如pa@ss/word→pa%40ss%2Fword - 验证命令:
composer config -g --list | grep -E "(http|https)-proxy",两行都得有且格式合法
NTLM 代理环境下不能只靠 composer config
公司内网常用 NTLM 认证代理(比如 Windows 域环境),Composer 原生不支持,设了 http-proxy 也会直接返回 407 Proxy Authentication Required 或 Unable to connect to http://repo.packagist.org。
必须引入中转代理工具,例如 cntlm 或 px,让它们监听 127.0.0.1:3128 并处理 NTLM 认证,再让 Composer 连这个本地地址。
- 临时验证是否是 NTLM 问题:
curl -x http://127.0.0.1:3128 -I https://packagist.org/packages.json,如果 curl 也报 407,说明中转层没配好 - 别指望
HTTP_PROXY环境变量——Composer 明确忽略它,只认自己的字段 - Windows 用户配完要重启终端,否则
%APPDATA%\Composer\config.json可能读不到新内容
全局配置 vs 项目级配置的优先级陷阱
优先级是硬编码的:项目级 > 全局 > 默认源。只要项目 composer.json 里有 "repositories" 字段(哪怕只是空数组 []),全局镜像和代理配置就完全失效。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
CI/CD(如 GitHub Actions)、宝塔后台(www 用户)、Docker 容器里,几乎都得走项目级配置才可靠;但项目级命令 composer config repo.packagist ...(不加 -g)会往 repositories 字段写对象,如果原先是 "repositories": [],会直接报错。
- 已有私有源?项目级命令会**完全覆盖**整个
repositories字段,不是追加——想保留,得手动合并 JSON 结构 - 换源后仍卡住,大概率是缓存或 lock 文件残留:先
composer clear-cache,再删vendor/和composer.lock,最后composer install -vvv看日志里是否出现镜像域名 - Windows 下若
composer config -g报Could not write to file,检查%APPDATA%\Composer\config.json目录是否存在且可写
process-timeout 和缓存协同调优
代理链路长、网络抖动大时,光配代理还不够:process-timeout 默认 300 秒(5 分钟),可能在元数据拉取阶段就超时中断。
建议将 process-timeout 设为 0(禁用超时)或至少 900,同时配合缓存策略减少重复请求:
- 全局设
process-timeout:composer config -g process-timeout 0 - 启用文件缓存 TTL:
composer config -g cache-files-ttl 86400(1 天) - 避免反复扫描 classmap:
classmap条目不会感知文件变更,改了函数文件后记得手动composer dump-autoload
真正容易被忽略的是:代理配置生效后,composer install 仍可能复用旧 composer.lock 中的包 URL 和哈希,导致绕过镜像或代理直连——重装必须清锁文件,不是仅清缓存。

















