Nginx原理

引用:

基本原理

Nginx的进程模型


Nginx服务器,正常运行过程中:

  1. 多进程:1个Master进程、多个Worker进程;
  2. Master进程:管理多个Worker进程:
    1. 对外接口:接收外部操作信号
    2. 对内转发:根据外部操作的不同,通过信号管理Worker
    3. 监控:监控Worker进程的运行状态,Worker进程异常终止后,自动重启Worker进程
  3. Worker进程:所有Worker进程都是平等的:
    1. 实际处理:网络请求,又Worker进程处理;
    2. Worker进程数量:在nginx.conf中配置,一般设置为CPU核心数,充分利用CPU资源,同时避免进程数量过多,避免进程之间竞争CPU资源,增加上下文切换的损耗。

思考:

  1. 请求是连接到Nginx,Master进程负责处理和转发?
  2. 如何选定哪个Worker进程处理请求?请求的处理结果,是否还要经过Master进程?

HTTP连接建立和请求处理过程:

  1. Nginx启动时,Master进程,加载配置文件;
  2. Master进程,初始化监听的socket;
  3. Master进程,fork出多个Worker进程;
  4. Worker进程,竞争新的连接,获胜方通过三次握手,建立Socket连接,并处理请求。

Nginx高性能、高并发:

  1. Nginx采用:多进程+异步非阻塞方式(IO多路复用epool)
  2. 请求的完整过程:
    1. 建立连接
    2. 读取请求:解析请求
    3. 处理请求
    4. 相应请求
  3. 请求的完整过程,对应到低层,就是:读写socket事件

Nginx的事件处理模型

request:Nginx中的http请求。
基本的HTTP Web Server工作模式:

  1. 接受请求:逐行读取请求行请求头,判断有请求体后,读取请求体
  2. 处理请求
  3. 返回响应:根据处理结果,生成相应的HTTP请求(响应行响应头响应体

Nginx也是这个套路,整体流程一致:

模块化体系结构


nginx的模块根据其功能基本上可以分为以下几种类型:

  • event module:搭建了独立于操作系统的事件处理的框架,及提供了各具体时间的处理。包括ngx_events_module,ngx_event_core_module和ngx_epool_module等。nginx具体使用何种时间处理模块,这依赖于具体的操作系统和编译选项。
  • phase handler:此类型的模块也被直接成为handler模块。主要负责处理客户端请求并产生待相应内容,比如ngx_http_static_module模块,负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出。
  • output filter:也被成为filter模块,主要是负责对输出的内容进行处理,可以对输出进行修改。例如,可以实现对输出的所有html页面增加预定义的footbar一类的工作,或者对输出的图片的URL进行替换之类的工作。
  • upstream:upstream模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从后端服务器上读取相应,发回客户端。upstream模块是一种特殊的handler,只不过相应内容不是真正由自己产生的,而是从后端服务器上读取的。
  • load-balancer:负载均衡,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 ChpiTer
  • Powered by Hexo Theme Ayer

请我喝杯咖啡吧~

支付宝
微信