nginx主要是由内核和模块组成的。
- 内核
内核的设计非常简洁,完成的工作主要是查找配置文件找到访问的URL所匹配的location block,并实现location中的相应指令。而location中的每个指令会调用不同的模块去完成相应的工作 - 模块
从结构上分:
核心模块: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等,实现服务代理及负载均衡 - nginx高并发
nginx高并发是因为采用了epoll模块,异步非阻塞。与Apache相比,Apache采用的时select模块,select模块在选择句柄的时候是遍历所有句柄,选择其中有事件通知的句柄去响应。而epoll模块是不需要遍历句柄链表,一但有句柄有事件通知立马就可以做出响应,所以效率更高一些。 - master进程
nginx在服务端默认监听80端口,服务一旦启动服务器就会创建一个master进程,同时由mater进程可以生成多个worker进程对请求做出响应。
服务器启动后创建master进程,并在master进程内创建一个监听80端口的socket,master进程会fork多个woker进程,每个worker进程一旦获得连接处理,会把listend变的仅可读,这样可以保证每个worker进程只对一个连接进行处理,当一个worker进程在accept一个连接后就会读取请求、解析请求、处理请求、产生数据,并将产生的数据返回给客户端,并断开连接。