跳转至

nginx

什么是 nginx

1. nginx 简介

Nginx(enginex)是一个高性能HTTP、反向代理、IMAP、POP3、SMTP服务器。 Nginx 特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好。

2. Nginx 相对于 Apache 优点如下:

  • 高并发响应性能非常好,官方 Nginx 处理静态文件并发 5w/s ;
  • 负载均衡及反向代理性能非常强;
  • 系统内存和 CPU 占用率低;
  • 可对后端服务进行健康检查;
  • 支持 PHP CGI 方式和 FastCGI 方式;
  • 可以作为缓存服务器、邮件代理服务器;
  • 配置代码简洁且容易上手。

nginx 工作原理

1. Nginx-Web 服务器主要是由各种模块协同工作,模块从结构上分为核心模块、基础模块和第三方模块,其中三类模块分别如下:

  • 核心模块: HTTP 模块、event 模块和 mail 模块等。
  • 基础模块: HTTPaccess 模块、HTTP FastCGI 模块、HTTP proxy 模块和 HTTP rewrite模块。
  • 第三方模块: HTTP upstream request hash 模块、notice 模块和 HTTP accesskey 模块、limit_req 模块等。

2. Nginx 的模块从功能上分为如下三类。

  • handlers(处理器模块): 此类模块直接处理请求,并进行输出出内容和修改 headers 信息等操作,handlers处理器模块一般只能有一个。
  • filters(过滤器模块): 此类模块主要对其他处理器模块输出的内容进行修改操作,最后由 Nginx 输出。
  • proxies(代理类模块): 此类模块是 Nginx 的 HTTP upstream 之类的模块,这些模块主要与后端一些服务比如 FastCGI 等进行交互,实现服务务代理和负载均衡等功能。

3. nginx 流程

  • Nginx 由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单, 仅是通过查找配置文件将客户端的请求映射到一个 location block ,而 location 是 Nginx 配置中的一个指令,用于访问的 URL 匹配,而 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。

image-20240510112528573

4. nginx 高并发

Nginx 的高并发得益于其采用了 epoll 模型,与传统的服务器程序架构不同,epoll 是 Linux 内核 2.6 以后才出现的, Nginx 采用 epoll 模型,异步非阻塞,而。Apache 采用的是 select 模型。

  • select 模型的特点为 select 选择句柄的时候,是遍历所有有句柄,也就是说句柄有事件响应时, select 需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。

  • epoll 模型的特点为 epoll 对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率丰非常高。

5. 怎样保证同一时刻一个 HTTP 请求被一个工作进程处理呢?

  • Nginx 默认以 80 端口监听在服务器上,并且启动一个 master 进程,同时由 master 进程生成多个工作进程,当浏览器发起一个 HTTP 连接请求,每个进程都有可能处理这个连接。

  • 首先每个 worker 进程都是从 master 进程 fork 出来,在 master 进程里面,建立好需要 listen 的 socket(listenfd) 之后,会 fork 出多个 worker 进程。所有worker 进程的 listenfd 会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有 worker 进程在注册 listenfd 读事件前抢 accept_mutex ,抢到互斥锁的那个进程注册 listenfd 读事件,在读事件里调用 accept 接受该连接。当一个 worker 进程在 accept 这个下连接之后,就开始读取请求、解析请求、处理请求,产生数据后,再返回给客户端,最后后才断开连接,这样形成一个完整的请求流程。

image-20240510114539824