Nginx模块与工作原理

nginx主要是由内核和模块组成的。

  1. 内核
    内核的设计非常简洁,完成的工作主要是查找配置文件找到访问的URL所匹配的location block,并实现location中的相应指令。而location中的每个指令会调用不同的模块去完成相应的工作
    qqqq.png-278.1kB
  2. 模块
    从结构上分:
    核心模块:HTTP模块、event模块和mail模块等
    基础模块:HTTP access 模块HTTP FastCGI模块、HTTP proxy 模块和HTTP rewrite模块等
    第三方模块:HTTP upstream request hash模块、notice 模块 和HTTP access key模块、limit_req模块等
    从功能上分:
    handers(处理器模块):用于处理请求,并进行输出内容和修改headers信息等操作,一般只能有一个
    filters(过滤模块):主要对其他模块处理后的数据进行修改,最后交给nginx返回给浏览器
    proxies(代理模块):主要与后端的一些服务进行交互,例如FastCGI等,实现服务代理及负载均衡
  3. nginx高并发
    nginx高并发是因为采用了epoll模块,异步非阻塞。与Apache相比,Apache采用的时select模块,select模块在选择句柄的时候是遍历所有句柄,选择其中有事件通知的句柄去响应。而epoll模块是不需要遍历句柄链表,一但有句柄有事件通知立马就可以做出响应,所以效率更高一些。
  4. master进程
    nginx在服务端默认监听80端口,服务一旦启动服务器就会创建一个master进程,同时由mater进程可以生成多个worker进程对请求做出响应。
    z.png-326.6kB
    服务器启动后创建master进程,并在master进程内创建一个监听80端口的socket,master进程会fork多个woker进程,每个worker进程一旦获得连接处理,会把listend变的仅可读,这样可以保证每个worker进程只对一个连接进行处理,当一个worker进程在accept一个连接后就会读取请求、解析请求、处理请求、产生数据,并将产生的数据返回给客户端,并断开连接。