记一次失败的Nginx配置

起因


大学闲来无事,又不想荒废时光。可是没有监督的话自己总是会怠惰,便想要搭建个部落格来记录下自己做了什么。

择日不如撞日,想到这里,我立马连上了我的Esxi服务器,开干!

emmm..CentOS的安装轻车熟路,就不怎么说了,不过为了保险和方便,我顺手装了GHome桌面环境,并且记下了网卡的名字 ens192


经过


安装完CentOS 7后的第一件事肯定是先装Nginx啦!

1
yum install nginx -y

诶,怎么回事,为什么会提示Nothing to do。

原来是yum的默认安装源不包含Nginx,所以我们必须手动为yum添加Nginx的安装源。

首先,我们在在 /etc/yum.repos.d/ 目录下创建一个源配置文件 nginx.repo

1
vim /etc/yum.repos.d/nginx.repo

文件内容如下

1
2
3
4
5
[nginx]
name = nginx repo
baseurl = http://nginx.org/packages/centos/7/$basearch/
gpgcheck = 0
enabled = 1

然后敲:wq保存退出,就可以直接执行命令安装Nginx啦!

在100Mbps的网速加持下,Nginx不一会就装好了,但是这时候Nginx服务还没有启动,让我们来启动它。

1
systemctl start nginx.service

CentOS 7用service nginx start的话会提示你用systemctl来管理服务喔。

没有回显,但是没有回显才是最好的回显。现在Nginx服务应该是启动状态了,测试一下~

1
curl http://localhost

果然返回了熟悉的Nginx欢迎界面。

然后我们为Nginx添加上开机启动。

1
systemctl enable nginx.service

至此,Nginx的安装就完成了。

可是还没完啊,我总不能用Nginx的默认目录吧?那样太low了!

Nginx默认的root目录不方便进行权限管理和其他操作。

我想想,Nginx的配置文件放在哪里来着?

1
vim /etc/nginx/nginx.conf

然而,并不是这里。
看到这一行了吗?

1
include /etc/nginx/conf.d/*.conf

这说明真正的配置文件其实在conf.d目录里。

我们用vim打开这个目录下的 default.conf 文件,它负责Nginx的默认配置

1
2
3
4
localtion / {
root /路径
index index.html index.htm;
}

找到这一段,将其中的/路径 改为你想要的路径,这里我设置为 /data/www/hexo,并且在目录下建立了index.html文件,内容如下。

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8">
</head>
<body>
<p>Nginx is running!</p>
</body>
</html>

嗯,应该可以了,用wq保存一下然后重启Nginx服务。

1
systemctl restart nginx.service

然后再一次查看运行状态。

1
curl http://localhost

故障排除

错误码 403 | SELinux

正当我准备享受胜利的果实时,终端返回给我了一个坏消息。

403 forbidden

诶? 啊咧? 怎么回事? 我的Nginx呢,好大一个,就在这里,怎么不见了QAQ?

答案当然是权限设置出了问题。(←想当然

1
2
chown -R nginx /data/www/hexo
chmod -R 755 /data/www/hexo

心想这下总该行了吧,但事实依旧残酷,curl依然返回403,问题并没有得到解决。

没办法,看看log文件吧。

1
vim /var/log/nginx/error.log #日志文件默认存放处

看到有这样的提示。

/data/www/hexo/index.html is forbidden(permission denied)

我试图单独给index.html 755权限,但是错误依旧。

该配的权限明明应该已经配好了啊,这是为什么啊QAQ!

难道是某个我不知道的地方出了问题?

又折腾了一个小时左右,无果。

难道只能放弃了吗?不死心的我进入了GHOME界面,试图去查看index.html的文件属性,结果在权限设置里发现了一行奇怪的属性。

[安全上下文:unconfined_u object_r home_root_t]

这个东西似曾相识…好像是SELinux?莫非就是这里的问题!

1
/usr/sbin/sestatus -v //查看SELinux运行状态
SELinux status:                 enabled

果然SELinux是开启状态,联想到通知栏不时弹出的警报,一i额就有了答案。接下来只要关闭SELinux就万事大吉了。

修改SELinux的权限管理太麻烦,这里偷个懒。

修改 /etc/selinux/config 文件。

SELINUX=enforcing → SELINUX=disabled

然后再次curl。

Nginx running!

哇成功啦!

外网无法访问 | Firewalld->Iptables

说起来还有个小问题,本地访问时Nginx可以正常显示,但是同局域网内的电脑却无法访问Hexo。

其实这又是CentOS的锅,CentOS 7使用firewalld来管理iptables规则,而firewalld默认是阻止80端口的。

我的话只会配置iptables,对firewalld一窍不通,不过没关系,即使是在CentOS 7,我们也是可以换回iptables的。

1
2
systemctl disable firewalld //停用firewalld
yum remove firewalld -y //卸载firewalld

使用下面的命令来恢复iptables,并且使iptables开机自启动。

1
2
yum install iptables-services -y
systemctl enable iptables

这样的话,iptables服务会开机启动,并从 /etc/sysconfig/iptables 文件中导入规则。

同时,为了让 /etc/init.d/iptables save 这条命令生效,需要进行以下操作。

1
cp /usr/libexec/iptables/iptables.init /etc/init.d/iptables

chkconfig iptables 命令会自动重定向到 sytemctl enable iptables

紧接着我们执行如下指令。

1
2
3
4
5
iptables -I INPUT 5 -i ens192 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save
service iptables restart

这个地方,我们就用到了一开始记下的网卡名称。

至此,CentOS 7 + Nginx的配置就全部结束啦。

想了想其实也没什么复杂的操作,就是自己太蠢。

嘛,就这样吧。