nginx模型解析

nginx模型解析

  • 一.访问nginx默认首页过程解析
    • 1.访问nginx默认首页流程图
    • 2.映射配置流程
  • 二.nginx的进程模型
    • 1. master进程与worker进程
      • 1.1 master进程
      • 1.2 worker进程
      • nginx模型图
    • 2. master与worker协作流程
      • 2.1 ./nginx -s reload
      • 2.2 worker怎么处理请求
      • 2.3 nginx多进程模型好处

在nginx安装与运行中成功运行nginx并访问到了nginx的默认页面,在此篇文章中就来说一下访问nginx默认页面的过程,以及对nginx模型的解析。

一.访问nginx默认首页过程解析

1.访问nginx默认首页流程图

nginx模型解析_第1张图片
步骤:
1 在浏览器页面输出192.168.142.147(默认访问80端口)
2 nginx监听端口,根据配置映射到访问的页面,再将数据返回

2.映射配置流程

配置映射在nginx的nginx.cof文件中,如下所示

    server {
        listen       80;
        server_name  localhost;
        
        location / {     //1.访问的url符合“/”
            root   html;	//2.就会找到相对路径html
            index  index.html index.htm;  //3.在html中找到index.html或index.htm返回到浏览器
        }

二.nginx的进程模型

输入命令,查看nginx进程
输入命令
可以发现,nginx启动后,以daemon多进程⽅式在后台运行,包括⼀个Master进程和多个Worker进程,Master进程是领导,是老大,Worker进程是干活的小弟。

1. master进程与worker进程

1.1 master进程

主要是管理worker进程,比如:

  1. 接收外界信号向各worker进程发送信号(./nginx -s reload)
  2. 监控worker进程的运⾏状态,当worker进程异常退出后Master进程会自动重新启动新的worker进程等

1.2 worker进程

  1. worker进程具体处理网络请求。
  2. 多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。(可以防止恶意攻击)
  3. ⼀个请求,只可能在⼀个worker进程中处理,⼀个worker进程,不可能处理其它进程的请求。
  4. worker进程的个数是可以设置的,⼀般设置与机器cpu核数⼀致。

nginx模型图

nginx模型解析_第2张图片

2. master与worker协作流程

2.1 ./nginx -s reload

当运行的nginx调用 ./nginx -s reload命令时,master与worker是如何工作呢?

  1. master文件对配置文件进行语法检查
  2. 尝试实施新配置(比如修改了监听端口,会尝试分配新的监听端口)
  3. 尝试配置成功后master会建立新的worker
  4. 新建成功后master对旧的worker发送关闭消息
  5. 旧的worker进程收到信号会继续服务,直到把当前进程接收到的请求处理完毕后关闭

2.2 worker怎么处理请求

假设我们监听8009端口,当一个请求来临时每个worker又有可能处理这个请求,并且此请求不会再被其他worker处理。

  1. master进程创建之后,会建⽴好需要监听的的socket,然后从master进程再fork出多个worker进程。此时,所有worker进程的监听描述符listenfd在新连接到来时都变得可读。
  2. nginx使⽤互斥锁来保证只有⼀个workder进程能够处理请求,拿到互斥锁的那个进程注册listenfd读事件,在读事件⾥调⽤accept接受该连接,然后解析、处理、返回客户端。

注意:nginx默认是使用epoll模式,在epoll模式下,每个worker都是异步非阻塞的,当一个请求在某个worker发生了阻塞,worker可以转过头去处理下一个请求。

2.3 nginx多进程模型好处

  • 每个worker进程都是独⽴的,不需要加锁,节省开销
  • 每个worker进程都是独⽴的,互不影响,⼀个异常结束,其他的照样能提供服务
  • 多进程模型为reload热部署机制提供了⽀撑

你可能感兴趣的:(nginx学习笔记,nginx,运维,linux)