NPM通过代理无法下载包:EPROTO错误求助
问题描述
在需通过代理访问互联网的服务器上工作,无法查看或修改代理配置,当前.npmrc配置如下:
https-proxy = "https://10.1.0.254:8080/" proxy = "http://10.1.0.254:8080/" strict-ssl = false
尝试下载包时出现以下错误:
npm ERR! code EPROTO npm ERR! syscall write npm ERR! errno EPROTO npm ERR! request to https://registry.npmjs.org/bower failed, reason: write EPROTO 139954307135424:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332: npm ERR! npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2023-02-15T15_26_16_616Z-debug-0.log
已知条件:
- 可通过该代理用浏览器访问
https://registry.npmjs.org/ - 服务器能解析该域名
- APT工作正常
- 已尝试删除
.npmrc依赖系统代理、更新NPM等方法,问题未解决 - 编辑补充:绕过代理后仍出现完全相同的问题,无需代理可ping通
https://registry.npmjs.org/,但依旧无法下载包
解决思路
强制指定TLS最低版本
错误提示SSL版本号不匹配,可能npm默认使用的TLS版本过低,与registry不兼容。执行以下命令强制使用TLS 1.2及以上版本:npm config set tls-min-v1.2 true也可以直接在
.npmrc中添加该行配置,之后重试包下载。重置npm网络配置并清除缓存
- 清除npm缓存:
npm cache clean --force - 清除所有代理相关配置(包括环境变量层面):
npm config delete proxy npm config delete https-proxy unset HTTP_PROXY HTTPS_PROXY - 若需要代理,重新配置时注意
https-proxy使用HTTP协议(部分代理服务器不支持HTTPS代理协议):proxy = "http://10.1.0.254:8080/" https-proxy = "http://10.1.0.254:8080/" strict-ssl = false
- 清除npm缓存:
更换npm registry源
尝试切换到国内镜像源,避免默认registry的SSL连接问题:npm config set registry https://registry.npmmirror.com/配置完成后执行
npm install bower测试是否能正常下载。检查端口连通性与防火墙规则
ping仅验证ICMP连通性,HTTPS依赖443端口,执行以下命令测试443端口是否可正常访问:telnet registry.npmjs.org 443 # 或用curl查看详细连接日志 curl -v https://registry.npmjs.org/bower如果连接失败,排查服务器本地防火墙或上游安全组是否拦截了443端口的出站流量。
验证openssl版本兼容性
检查服务器上openssl版本:openssl version若版本低于1.0.1g,建议升级openssl至支持TLS 1.2的版本,旧版本openssl可能无法与现代HTTPS服务器建立连接。
内容的提问来源于stack exchange,提问作者SmeD
相关产品推荐
相关产品推荐

