Nginx 目录结构和运行原理

1. 简介

nginx 是目前最流行的 web 服务器软件,也是目前互联网公司和网站的首选

nginx 发行版比较多,常用版本有两大阵营,我们平时使用最多的是开源版,本文使用的也是开源版

2. 安装

nginx 有多种安装方式:

方式一:使用包管理器,这种方式比较简单,只需要一个 install 命令即可

 
  1. # MacOS
  2. brew install nginx
  3. # Windows
  4. scoop install nginx

方式二:使用源码进行编译安装

nginx 是使用 c 语言开发的,那么也就可以像其他 c 语言项目一样,下载 nginx 的源码到自己的服务器上,然后执行预编译、编译和安装,这种方式比较灵活,可以自定义各种配置参数,适合于一些特殊的场景

这种方式也是比较麻烦的,因为编译安装的过程,可能会遇到各种各样的问题,需要有一定的排查和解决问题的能力

 
  1. ./configure --prefix=/usr/local/nginx

方式三:使用 Docker 安装,使用 docker 镜像来安装和运行 nginx

这种方式也是比较简单的,只需要执行几个 docker 命令就可以了,想要学习和体验已经足够满足了

 
  1. docker pull nginx
3. 服务启停

nginx 安装完成之后就可以来启动服务了,在 nginx 安装目录下的 sbin 目录下运行以下命令

回车之后没有任何提示消息的话,就表示启动成功了,这是 linux 系统的一个设计思想,没有消息就是最好的消息

如果启动失败的话会有提示,那么就需要根据提示信息来排查和解决问题

 
  1. ./nginx

nginx 的服务启动之后,会作为一个后台进程一直运行,我们运行下面命令查看 nginx 进程

 
  1. ps -ef | grep nginx

这里只需要关注前面两个进程就可以了,一个是 master 进程,一个是 worker 进程

稍微解释一下 nginx 的进程模型,这里的 master 进程就是 nginx 的主进程

它主要负责读取和验证配置文件以及管理 worker 进程,worker 进程就是 nginx 的工作进程,负责处理实际的请求,master 进程只有一个,而 worker 进行可以有多个

master 进程和 worker 进程之间的关系就像是老板和员工的关系一样,老板负责管理员工,并且将工作分配给员工,员工负责完成具体的工作,worker 进程的数量可以通过配置文件来调整

上图中的第二列就是 PID,也就是进程 ID,PID 是 Linux 系统中每一个进程的唯一标识

还可以使用 lsof 命令来查看一个端口占用情况

 
  1. lsof -i:80

有些系统没有自带 lsof 命令,需要手动安装【mac 已经自带,无需自行安装】

 
  1. # centos
  2. yum install lsof -y

我们可以看到 80 端口正被 nginx 的两个进行占用着

这两个进程的 PID 就是上面我们看到的 nginx 的进程 PID,表示 nginx 正在监听 80 端口

nginx 服务启动之后,我们可以通过 ./nginx -s 参数 来控制 nginx 的停止或重启

 
  1. ./nginx -s quit # 优雅停止
  2. ./nginx -s stop # 立即停止
  3. ./nginx -s reload # 重载配置文件
4. 目录结构

在使用 nginx 之前,我们先对安装好的 nginx 目录文件进行一个分析,可以使用一个工具 tree,使用该命令可以方便的查看文件目录结构,要使用该命令需要先进行安装,运行以下命令即可

 
  1. yum install tree -y
1. 目录概览

nginx 一般都是安装在 /usr/local/nginx 目录,本文默认您将 nginx 安装到此目录下

 
  1. ./configure --prefix=/usr/local/nginx

nginx 安装完成后,在其安装目录下默认有下面四个目录

 
  1. ├── conf # 配置文件存放目录
  2. ├── html # 默认站点目录
  3. ├── logs # 日志文件存放目录
  4. ├── sbin # nginx 主程序文件存放目录

如果你的目录下多了好几个以 _temp 为后缀的目录,无需关注,这几个目录都是 nginx 运行时产生的临时文件

 
  1. ls /usr/local/nginx

nginx 目录结构一览图

2. conf 目录

conf:nginx 配置文件存放目录

可以将默认的配置文件分为三大类:cgi 相关配置文件

CGI(Common Gateway Interface):通用网关接口,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用 CGI 程序处理及相应结果给客户端的一种标准规范

 
  1. ├── fastcgi.conf # fastcgi 配置文件
  2. ├── fastcgi.conf.default # fastcgi.conf 的备份文件
  3. ├── fastcgi_params # fastcgi 参数配置
  4. ├── fastcgi_params.default # fastcgi_params 的备份文件
  5. ├── scgi_params # scgi 参数配置
  6. ├── scgi_params.default # scgi_params 的备份文件
  7. ├── uwsgi_params # uwsgi 参数配置
  8. ├── uwsgi_params.default # uwsgi_params 的备份文件
  9. ├── koi-utf
  10. ├── koi-win
  11. ├── win-utf
  12. ├── mime.types
  13. ├── mime.types.default
  14. ├── nginx.conf
  15. ├── nginx.conf.default

nginx.conf 为主配置文件,主配置文件会引用其他配置文件

当修改配置文件后,运行以下命令来检查配置文件的内容是否正确,当有错误时,会提示错误的位置和原因

 
  1. ./nginx -t

nginx 的配置文件修改后,都是需要重新加载一下才会生效的

 
  1. ./nginx -s reload

在主配置文件 nginx.conf 中可以修改 worker 进程的数量

 
  1. # worker 进程数量默认只有一个
  2. worker_processes 1;

将 worker 进程数量设置为 3 个,重载 nginx 配置后,查看进程就能看到生效了

 
  1. worker_processes 3;

一般来说,worker 进程的数量保持和服务器 CPU 内核的数量相同是比较合适的,也可以设置为 auto,这样 nginx 就会根据内核的数量来自动设置 worker 进程的数量

 
  1. worker_processes auto;
3. logs 目录

logs 目录用来存放 nginx 日志文件和主进程 pid,日志文件比如:访问日志 (access.log) 和错误日志 (error.log)

nginx.pid 用来记录 nginx 主进程的 pid(当 nginx 服务启动后才会该文件)

4. sbin 目录

sbin 目录用于存放 nginx 主进程文件,根据它可以启动、停止 nginx 服务以及重载 nginx 配置

5. 运行原理

a. 基本运行原理

nginx 的高性能,其实和它的架构模式有关,nginx 默认采用的是多进程的方式来工作的

当通过 nginx 主进程文件启动 nginx 服务时,会开启主进程,然后主进程就会读取并校验配置文件(nginx.conf)

当配置文件没有错误时,会开启多个子进程,用于接受并响应请求

当有网络请求发送时,子进程就会接受请求,然后解析请求,读取配置文件,然后响应请求

b. 总结

nginx 服务启动会运行一个主进程,多个子进程,主进程负责协调子进程

当配置文件更改了,我们会执行以下命令重新加载配置文件

 
  1. ./nginx -s reload

该命令会将子进程杀掉,在杀掉之前会留有时间完成之前用户的请求,并且告诉子进程不允许再接受新的请求了

https://www.lengleng.net

当子进程把所有之前的请求完成后,子进程就会被杀掉了,新的子进程去读新的配置文件

验证上面的话,如下图所示,reload 之后,子进程的 pid 变了,主进程并没有变

 
  1. ps -ef | grep nginx
  2. /usr/local/nginx/sbin/nginx -s reload

nginx 基本运行原理如下图所示

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Web Server系统的结构运行原理如下: 结构: Web Server系统由以下部分组成: 1.硬件:Web Server系统需要一台服务器,它通常是一台高性能的计算机,配备了用于处理大量请求的处理器,并具有足够的存储容量和网络带宽。 2.操作系统:Web Server系统需要经过专门设计的操作系统,如Linux、Windows等。 3.Web Server软件:Web Server软件是系统的核心。它处理来自客户端的HTTP请求,将请求与服务器上的资源匹配,生成响应,并将响应发送回客户端。常见的Web Server软件包括Apache、Nginx、IIS等。 4.应用程序:Web Server系统还需要运行Web应用程序,如PHP、ASP.NET、Java等。这些应用程序处理用户请求并提供响应。应用程序可以与Web Server软件及其支持的协议进行通信,以获取有关请求参数和其他信息。 运行原理: 1.用户通过Web浏览器向Web Server发送HTTP请求。 2.Web Server收到请求后,将请求传递给Web Server软件。 3.Web Server软件处理请求,并根据请求的URL路径查找要呈现的资源(例如HTML、CSS、JavaScript文件)或Web应用程序。 4.Web Server软件运行应用程序,并通过适当的协议与应用程序通信,以检索响应。 5.Web Server将响应发送回Web浏览器,完成请求-响应循环。 6.如果Web应用程序需要从数据库或文件系统中检索数据,则需要其他组件来协助处理请求和响应。这些组件包括数据库管理系统、文件系统和其他应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超酷的站长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值