CentOS 7执行sudo yum update时报curl#52错误(Empty reply from server)求助
嗨,刚接触CentOS 7遇到这个问题很正常,我来帮你一步步排查解决:
首先先明确你的问题情况:
我尝试运行
sudo yum update时遇到错误:
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#52 - "Empty reply from server"
我已经在/etc/yum.conf中添加了代理配置(因为需要通过代理访问互联网),但仍然失败。我是CentOS Linux 7的新手,求帮助。
下面是针对性的排查和解决步骤:
一、先确认代理配置是否正确
很多时候代理格式写错是问题根源,你打开/etc/yum.conf检查是否符合以下格式:
# 无认证的代理配置 proxy=http://你的代理IP:代理端口/ # 如果代理需要用户名密码认证,追加下面两行 proxy_username=你的代理用户名 proxy_password=你的代理密码
注意:端口号、IP地址别写错,结尾的斜杠也不能省略哦!
二、测试代理能否正常访问镜像地址
直接用curl命令验证代理的连通性,执行下面的命令(替换成你的代理信息):
curl -x http://代理IP:端口 http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock
- 如果返回空内容:说明代理本身有问题,可能是代理服务器未启动、代理不允许访问CentOS镜像地址,或者网络防火墙拦截了请求,这时候需要联系运维确认代理的可用性。
- 如果能返回一串镜像地址:说明代理是正常的,问题出在yum配置或系统其他设置上。
三、尝试用全局环境变量临时配置代理
有时候yum.conf的配置没生效,或者sudo执行时没有继承代理环境变量,你可以试试临时设置全局代理再执行yum:
export http_proxy=http://代理IP:端口 export https_proxy=http://代理IP:端口 sudo yum update
如果这样能成功,说明是sudo未继承环境变量的问题,你可以用visudo命令(一定要用这个命令,直接编辑会导致sudo失效)编辑sudoers文件,添加一行:
Defaults env_keep += "http_proxy https_proxy"
四、替换CentOS 7归档源(非常重要!)
CentOS 7已经停止官方维护,原来的mirrorlist.centos.org可能已经无法正常提供服务,这也是很多用户遇到该错误的核心原因。你可以把yum源换成官方归档源:
- 先备份原有的repo配置文件,防止出错:
sudo cp -r /etc/yum.repos.d/ /etc/yum.repos.d.bak/
- 编辑
/etc/yum.repos.d/CentOS-Base.repo文件,将每个小节的内容修改为如下(注释掉原mirrorlist,替换baseurl为归档地址):
[base] name=CentOS-$releasever - Base # 注释原mirrorlist # mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://vault.centos.org/centos/7/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates # mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra baseurl=http://vault.centos.org/centos/7/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras # mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra baseurl=http://vault.centos.org/centos/7/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
- 清理旧缓存并生成新缓存:
sudo yum clean all sudo yum makecache
- 再次执行
sudo yum update试试。
五、检查防火墙和SELinux是否拦截请求
临时关闭SELinux测试:
sudo setenforce 0
临时关闭防火墙测试:
sudo systemctl stop firewalld
如果此时yum能正常运行,说明是安全策略拦截了请求,之后你需要重新开启防火墙和SELinux,并配置相应规则允许yum的网络访问。
备注:内容来源于stack exchange,提问作者Muhammad Asyraf

