nginx是一个事件驱动框架[网络事件], 每个连接对应两个事件(读事件和写事件),来看看nginx处理请求的流程 文章目录 请求网络传输流程TCP流与报文TCP协议与非阻塞接口nginx事件循环处理事件的循环 请求网络传输流程 以太网->路由器的链路层->路由器的网络层(记录运营商ip) 链路层->网络层 请求 客户端应用层(发送get请求) 客户端传输层(记录nginx打开的端口) 客户端网络层(记录客户端ip与服务端ip) 客户端链路层 客户端物理层 广域网 服务端以太网 服务端链路层 服务端网络层 服务端传输层(操作系统根据记录的端口分配到进程) 服务端应用层(nginx状态处理机处理请求) TCP流与报文 tcp/ip协议层级 应用层 (HTTP,SMTP,POP3,IMAP,SSH,DNS) 传输层 {源、目的,端口(TCP,UDP)} 网络层 {源、目的IP地址(IP,ICMP,DHCP,ARP)} 数据链路层 {源、目的MAC地址(Ethernet)} TCP协议与非阻塞接口 读事件 Accept建立连接Read读消息 写事件 Write写事件 1 2 3 4 5 1 2 3 4 5 由以上事件触发定时器到期事件 事件收集、分发者 请求建立tcp连接事件 tcp连接可读事件 tcp连接关闭事件 tcp连接可写事件 异步读磁盘成功事件 连接建立事件消费者 读事件消费者 写事件消费者 连接关闭事件消费者 异步读磁盘事件消费者 定时器事件消费者 nginx事件循环 添加事件 获取事件 有生成新的事件时,可添加到队列 操作系统内核 事件队列 等待客户端连接事件 接收队列事件,如:[建立连接,tcp请求报文,...] 处理事件的循环 处理事件的循环 是 否 如果需要生成新的事件 处理完成 事件队列是否为空 从队列取出事件 处理事件 添加新事件, 如:[定时关闭连接,写事件,...] end