安装nginx和配置的过程并不顺利,于是决定记录下来便于回顾。
安装nginx
万万没想到,安装的第一步就出了问题,当我输入yum install nginx
命令时,返回了一个没有可用软件包的提示。

查阅知道,nginx在第三方的yum源,不在centos官方源里面。
于是yum install epel-release
。
epel-release
是Extra Packages for Enterprise Linux的缩写(企业Linux的额外软件包)。
这时候通过yum install nginx
就可以顺利下载安装 nginx了。
然后systemctl start nginx
和 systemctl enable nginx
启动nginx。
通过虚拟机的IP访问页面
nginx安装好后,一般就可以通过虚拟机的IP地址直接访问到由nginx默认配置下的页面。但直接访问一般还是访问不到的,这个时候还需要通过防火墙去开放80端口。
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --reload
这个时候,再次访问就可以得到虚拟机返回的默认页面了。
配置nginx
通常来说,前端静态资源一般部署在 /var/www
目录下。于是我mkdir /var/www/html/home
,并在该目录下通过 touch index.html
创建了一个html文件。
在etc/nginx/conf.d
下创建一个index.conf配置文件,
conf
server {
listen 80;
server_name localhost;
root /var/www/html/home;
}
正以为一切顺风顺水时,浏览器输入虚拟机的IP,却返回了403页面......
又只能一个一个排查问题了。
首先要知道403的状态码的含义,也就是说服务器接收到了请求,但拒绝执行。于是先确定一下是否目录访问权限的问题。
因为在nginx的默认配置下,nginx是以nginx
角色进行线程操作,于是通过 ls -l 目标目录
去查询文件夹和文件的权限。
可以知道drwxr-xr-x. 20 root root 278 4月 22 19:05 var
,通过修改组的方式,让nginx获取读取权限。
chown -R root:nginx /var
通过ls -l /
命令发现/var
下都已经修改成功。
于是再次访问,发现还是403,那就只能继续检索到底是什么问题了。
通过百度,可以知道nginx有一个自带的安全模块SELinux
,负责强制访问控制机制。
修改/etc/selinux/config
下的SELINUX=ENFORCING
为 SELINUX=disabled
,保存退出,reboot
重启系统。这个时候再去访问,发现可以正确获取到home/index.html
了。
但是关闭SELinux
是非常不安全的行为,只能通过改变SELinux
的访问策略去让nginx
通过。于是再次启动ESLinux
并重启系统。
先检查SELinux的日志,grep nginx /var/log/audit/audit.log
,可以知道nginx
尝试访问,但被ESLinux拒绝。
这个时候可以使用 ls -Z
来检查目标目录和内容的SElinux的上下文,确定他们被设置为正确的类型。
通常会获取到下面一串
drwxr-xr-x. root root system_u:object_r:var_t:s0
具体含义可以百度获取,我也半知半解。
一层一层检测下来,会发现,目标下的文件的类型与我们想要的不一样,正确的应为httpd_sys_content_t:s0
而不是var_t:s0
于是我决定更改SELinux上下文类型
。
chcon -v --type=httpd_sys_content_t /var/www/html/home/index.html
当我再次访问的时候,终于正确访问到了我想要的网页。
更多的配置
如果html文件不是index.html
,还可以通过index
字段来指定目标文件。
ini
server {
listen 80;
server_name localhost;
root /var/www/html/home;
index home.html;
}