连接保持:
keepalive_timeout
指令控制连接保持时间(默认75秒)连接复用流程:
客户端请求 → Nginx接收 → 处理请求 → 保持连接(不立即关闭)
↓
新请求到达 → 复用现有连接 → 处理请求 → ...
关键数据结构:
ngx_connection_t
结构体跟踪连接状态ngx_event_t
处理读写事件减少TCP握手开销:
降低系统资源消耗:
网络延迟优化:
二进制分帧层:
流与多路复用:
Nginx具体实现:
ngx_http_v2_module
处理HTTP/2协议ngx_http_request_t
扩展支持多流处理头部压缩(HPACK):
请求并行化:
服务器推送:
特性 | HTTP长连接 | HTTP/2多路复用 |
---|---|---|
连接利用率 | 串行请求 | 并行请求 |
头部处理 | 每次完整发送 | HPACK压缩 |
资源优先级 | 无原生支持 | 内置优先级机制 |
队头阻塞 | 存在 | 解决 |
实现复杂度 | 简单 | 复杂 |
适用场景 | HTTP/1.x环境 | 现代浏览器环境 |
长连接配置:
keepalive_timeout 65; # 连接保持时间
keepalive_requests 100; # 单个连接最大请求数
HTTP/2配置:
listen 443 ssl http2; # 启用HTTP/2
http2_max_concurrent_streams 128; # 最大并发流数
http2_recv_timeout 30s; # 流超时时间
混合环境优化:
调试与监控:
ngx_http_stub_status_module
监控连接状态通过深入理解这些底层机制,可以更有效地优化Nginx配置,充分发挥HTTP长连接和HTTP/2的性能优势。