从零开始安装nginx

在公司的服务器上安装nginx,全新的服务器,啥都没有,踩了很多坑记录一下

使用yum命令报错 “there are no enabled repos”

说明yum命令无法安装nginx

首先使用yum list,可以查出数来,证明ISO系统镜像是关联的且挂载成功

再使用yum repolist,显示仓库数目为0

说明.repo文件出错了。

一般来说,默认携带的.repo文件位置是 /etc/yum.repos.d/*.repo,不过一般需要换成国内的景象文件,一般常用的是163镜像和阿里云镜像。

解决方案

首先,查看是否安装了yum工具,如果没有则安装yum工具。

rpm -qa | grep yum

CentOS 报错:There are no enabled repos:

接下来进入repo文件的目录,先备份源文件

cd /etc/yum.repos.d

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

然后下载系统对应的国内镜像

163:http://mirrors.163.com/.help/centos.html
阿里云:https://mirrors.aliyun.com

下载对应版本repo文件后, 放入/etc/yum.repos.d/(操作前请做好相应备份)。可以使用xftp、filezila等工具上传。

然后运行一下命令生成缓存

yum clean all

yum makecache

这里可能会有一个问题,上传到这个文件夹需要root权限,使用第三方工具不一定能成功。可以先将文件上传到其他地方,再在服务器上进行复制转移。

还有一个问题,如果直接在服务器上使用curl、wget下载,使用yum会报错File contains no section headers,接下来详细说明一下

使用yum命令报错 “File contains no section headers”

问题可能出现在:

  1. 多repo文件混用,系统无法识别
  2. 下载的repo文件有问题
  3. 网络出口限制,网络问题(校园网常见)

总而言之,repo文件有问题。

多repo文件混用

进入repo文件的目录,可以看到存在多个repo文件,没必要,理论上有一个就行,建议将其他repo文件备份,只留一个

CentOS-Debuginfo.repo
CentOS-Vault.repo
CentOS-Base.repo (在线yum源安装使用的配置文件)
CentOS-Media.repo (光盘yum源使用的配置文件)

下载的repo文件有问题

进入repo文件目录,使用cat命令查看刚刚下载的repo文件内容

cat /etc/yum.repos.d/CentOS-Base.repo

在使用浏览器下载这个文件,本地看一下文件内容,如果发现和服务器的repo文件有较大差异,说明下载过程出错了。

复制粘贴正确的内容,然后在服务器上使用vim编辑repo文件,粘贴过去,保存。

所以建议下载到本地然后上传到服务器。比较保险、方便。

网络问题

常见于校园网选手,一般安装过程中会有明显提示,显示网络中断等。可以使用手机热点尝试一下。

yum命令安装nginx报错:“curl: (6) Could not resolve host: mirrors.163.com; Unknown error“

解决上述问题后,开始联网安装时可能会报错:curl: (6) Could not resolve host: mirrors.163.com; Unknown error

这是DNS域名解析问题,可以添加nameserver解决

echo nameserver 8.8.8.8 > /etc/resolv.conf
# or
echo nameserver 8.8.4.4 > /etc/resolv.conf

yum命令安装nginx报错 “No package nginx available. Error: Nothing to do“

真是服了,居然还能报错。出现这个的原因是因为本地yum源中没有我们想要的nginx,nginx位于第三方的yum源里面,而不在centos官方yum源里面

可以尝试安装epel(Extra Packages for Enterprise Linux)

sudo yum install -y epel-release
sudo yum -y update

如果没用的话,可能要再更换repo文件。。。。。

接下来在安装nginx就可以啦。记得打开防火墙的80和443端口。

sudo yum install -y nginx

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

总结

因为是基础的服务器设置问题,所以遇到的情况一般网上都有现成的答案,要多搜搜多看看,慢慢来

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。