关于我安装nginx 到配置的全过程

安装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 nginxsystemctl 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=ENFORCINGSELINUX=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;
}
相关推荐
咸鱼加辣16 小时前
【nginx面试题】nginx虚拟
运维·nginx·github
全栈工程师修炼指南16 小时前
Nginx | HTTPS 加密传输:Nginx 反向代理与上游服务 SSL 双向认证实践
网络·数据库·nginx·https·ssl
苹果醋318 小时前
JAVA设计模式之策略模式
java·运维·spring boot·mysql·nginx
linweidong1 天前
顺丰运维面试题及参考答案
运维·nginx·容器·ansible·运维开发·防火墙·python面试
MonkeyKing_sunyuhua1 天前
ubuntu22.04安装nginx
运维·windows·nginx
无极小卒2 天前
Nginx服务器无法访问图片的问题解决
运维·服务器·nginx
眠りたいです2 天前
Docker:认识Docker镜像仓库并进行拉取推送
运维·nginx·docker·容器·busybox
kong79069282 天前
环境搭建-运行前端工程(Nginx)
前端·nginx·前端工程
苹果醋32 天前
java设计模式之责任链模式
java·运维·spring boot·mysql·nginx
卡布叻_星星2 天前
Docker之Nginx前端部署(Windows版-x86_64(AMD64)-离线)
前端·windows·nginx