Node 16.11.1+npm 8.0.0使用cntlm代理报ECONNRESET错误如何解决
配置存在的问题
- 缺少
strict-ssl=false配置:企业cntlm代理通常会对HTTPS请求做证书替换,npm默认开启SSL严格校验,会拒绝代理返回的企业内部证书,直接触发连接重置 - npm 8.0.0版本存在代理处理已知缺陷:该版本对本地HTTP代理转发HTTPS请求的处理逻辑存在bug,部分场景下会主动断开连接抛出ECONNRESET错误
- 未做代理可用性前置校验:无法确认cntlm的3128端口是否正常监听、cntlm本身的企业认证配置是否正确
排查解决步骤
- 调整.npmrc配置,添加SSL校验关闭规则,修改后的完整配置如下:
registry=https://registry.npmjs.org/ proxy=http://127.0.0.1:3128/ https-proxy=http://127.0.0.1:3128/ strict-ssl=false user-agent=npm/8.0.0 node/v16.11.0 darwin x64
- 验证cntlm代理可用性
- 执行
nc -zv 127.0.0.1 3128检查3128端口是否可连通,端口不通的话先重启cntlm服务,核对cntlm配置文件中的企业代理地址、账号、域名、认证方式是否正确 - 执行
curl -x http://127.0.0.1:3128 https://registry.npmjs.org/ping测试代理是否能正常访问npm源,正常会返回包含"ok": true的JSON结果
- 修复npm版本兼容问题
执行npm i -g npm@8.19.4 --registry=https://registry.npmmirror.com升级到npm 8的长期稳定版本,修复代理处理的已知bug - 清理缓存重试
执行npm cache clean --force清理本地损坏的缓存文件,再重新执行安装操作
如果以上步骤执行后仍报错,可以将registry临时替换为国内镜像源https://registry.npmmirror.com/测试,排除企业代理限制访问npm官方源的问题。
内容的提问来源于stack exchange,提问作者nkol
相关产品推荐
相关产品推荐

