centos 8 的 dnf 必须在 /etc/dnf/dnf.conf 的 [main] 段显式配置 proxy=、proxy_username= 和 proxy_password=,且需注释 mirrorlist=、启用 baseurl= 并执行 dnf clean all && dnf makecache 才能生效。

CentOS 8 的 dnf 默认不读取环境变量(如 http_proxy)或旧版 /etc/yum.conf 中的代理设置,必须显式配置 /etc/dnf/dnf.conf 才能生效。直接改 yum.conf 或设 shell 变量是无效的。
必须改 /etc/dnf/dnf.conf 的 [main] 段
dnf 在 CentOS 8 中完全接管了包管理逻辑,其主配置文件是 /etc/dnf/dnf.conf(而非软链接过去的 /etc/yum.conf)。任何代理配置都得写在这里的 [main] 下:
-
proxy=必须是完整 URL,例如http://192.168.1.100:8080或https://proxy.example.com:3128;socks5://不被原生支持 - 若代理需要认证,追加
proxy_username=和proxy_password=,注意密码中若含特殊字符(如@、/)需 URL 编码 - 不要在
proxy=后加斜杠(http://host:port/是错的),否则连接会失败 - 配置后必须运行
dnf clean all && dnf makecache,否则缓存仍走直连路径
SOCKS 代理要靠 proxychains 套壳,不能直配
DNF 原生只支持 HTTP/HTTPS 代理,socks5:// 会报错 Failed to download metadata for repo 'baseos': Cannot prepare internal mirrorlist。真实可用方案是用 proxychains 包裹命令:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 安装:
dnf install proxychains-ng - 编辑
/etc/proxychains.conf,确保最后一行是socks5 127.0.0.1 1080(对应本地 SOCKS 服务地址) - 执行命令时加前缀:
proxychains dnf install nginx,而不是改 DNF 配置 - 注意:
proxychains会拦截所有子进程网络调用,某些插件(如dnf-plugins-core)可能异常,建议仅用于临时场景
镜像源里 mirrorlist 会绕过代理,必须切到 baseurl
很多默认 repo 文件(如 /etc/yum.repos.d/CentOS-AppStream.repo)同时定义了 mirrorlist= 和 baseurl=。DNF 优先用 mirrorlist,而该字段解析时**不经过代理**,导致超时或失败:
- 逐个打开
/etc/yum.repos.d/*.repo,把所有以mirrorlist=开头的行注释掉(前面加#) - 取消注释对应位置的
baseurl=行(通常在同一段内,且带$releasever、$basearch变量) - 确认
baseurl地址可被代理正常访问(例如用curl -x http://proxy:port https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/repodata/repomd.xml测试) - 国内用户建议直接换阿里云等镜像源,避免境外
mirrorlist解析卡死
真正容易被忽略的是:即使 dnf.conf 代理配置正确,只要 repo 文件里还留着未注释的 mirrorlist=,DNF 就会跳过代理去直连镜像列表服务器——这个行为不会报错,只会静默失败,最终表现为 dnf makecache 卡住或提示元数据下载失败。










