Nginx事件驱动架构统一基于epoll/kqueue等I/O多路复用,差异仅体现在协议感知层的配置策略:HTTP/HTTPS侧重请求响应与TLS处理,WebSocket强调连接保活与头部透传,TCP/UDP则纯转发不解析应用层。

HTTP/HTTPS 连接:短生命周期 + 请求驱动
HTTP 默认按“请求-响应”模型运作,连接常被复用(Keep-Alive),但单次事务边界清晰。Nginx 事件循环在此场景下侧重:
• 快速完成读取请求头、解析 URI、匹配 location、转发或本地服务响应;
• 对空闲连接启用 keepalive_timeout 控制复用时长;
• TLS 握手由 ssl 模块接管,加密解密在用户态完成,不阻塞事件循环;
• 静态文件服务直接调用 sendfile 或零拷贝路径,减少内存拷贝开销。
WebSocket 连接:长生命周期 + 帧透传优先
WebSocket 不是 Nginx 自身处理的协议,而是被识别为需“隧道化维持”的特殊 HTTP 升级流。事件循环在此场景下转向连接保活与头部透传:
• 依赖 proxy_http_version 1.1 启用持久连接能力;
• 强制透传 Upgrade 和 Connection: upgrade 头,否则握手失败;
• 关闭默认的超时保护,显式设置 proxy_read_timeout 和 proxy_send_timeout 为数小时级;
• 不解析帧内容,不做业务逻辑,仅维持 TCP 连接并转发原始字节流;
• 连接路由必须稳定,常用 ip_hash 或 sticky 实现后端粘性。
TCP/UDP 连接:无协议解析 + 纯转发模式
当启用 stream 模块时,Nginx 跳出 HTTP 上下文,进入四层代理模式。事件循环此时只做连接跟踪与数据搬运:
• 不解析应用层协议(如 MySQL、Redis、TLS 握手包),不校验内容合法性;
• 使用 listen + proxy_pass 直接映射端口,建立客户端与后端的透明通道;
• 超时控制由 timeout、proxy_timeout 等 stream 级指令管理;
• 支持 SSL/TLS 终止或透传,取决于是否配置 ssl_preread 或 ssl_certificate。
关键共性:事件循环不区分协议,只响应就绪状态
无论哪种协议,Nginx worker 进程都只做三件事:
• 监听 socket 是否可读/可写(epoll_wait 返回就绪列表);
• 对就绪连接执行对应模块的 handler(http_handler / stream_handler / ssl_handshake_handler);
• 根据配置决定是解析、转发、终止还是丢弃——决策逻辑全在配置层,不在事件引擎内。



















