Ubuntu中如何添加域名代理豁免?设置no_proxy后仍无法访问该怎么办?
我来帮你排查这个问题——把域名加到/etc/environment的no_proxy后没生效是个挺常见的情况,咱们一步步来定位解决:
先修正最容易踩的坑:URL格式错误
你提到把https://registry.npmjs.org加到了no_proxy里,这是典型的错误!no_proxy配置项只需要填写域名或IP,不需要带协议前缀(http://或https://)。你得把它改成registry.npmjs.org,如果有多个豁免项,用逗号分隔(注意不要加空格)。让配置立刻生效
修改/etc/environment后,系统不会自动加载新配置,你需要:- 要么重新登录当前用户会话
- 要么在终端执行命令手动加载:
source /etc/environment
执行完后可以用echo $no_proxy验证,确认registry.npmjs.org已经在列表里。
检查npm自身的代理配置(关键!)
系统级的代理豁免有时候会被npm自己的配置覆盖,你得单独确认npm的代理设置:- 先查看当前npm的代理:
npm config get proxy和npm config get https-proxy - 如果这两个命令返回了代理地址,那你需要给npm单独设置豁免:
npm config set no-proxy registry.npmjs.org - 要是你根本不需要npm走代理,直接清除npm的代理配置更省心:
npm config delete proxy npm config delete https-proxy
- 先查看当前npm的代理:
排查是否有其他代理配置文件干扰
Ubuntu里除了/etc/environment,还有不少地方能设置代理:- 个人用户的
~/.bashrc、~/.bash_profile文件 /etc/profile.d/目录下的脚本文件
这些地方的no_proxy配置会覆盖系统级的设置,你得打开这些文件检查,如果里面有no_proxy的定义,把registry.npmjs.org也加进去,然后执行source ~/.bashrc(对应文件)让修改生效。
- 个人用户的
验证网络连接是否真的绕过了代理
配置完后用curl测试最直观:curl -v https://registry.npmjs.org,看输出里的连接日志——如果看到* Connected to registry.npmjs.org (xxx.xxx.xxx.xxx) port 443,说明已经绕过代理;如果出现* Connected to your-proxy-server (xxx.xxx.xxx.xxx) port 8080,那说明豁免还是没生效,得回头检查前面的步骤。最后:刷新DNS缓存(可选)
要是前面都做了还是不行,可能是DNS缓存导致的域名解析异常,执行sudo systemd-resolve --flush-caches刷新DNS(针对用systemd的Ubuntu版本,比如18.04及以后)。
内容的提问来源于stack exchange,提问作者Prem

