长连接
HTTP Keep-Alive 概述
HTTP 长连接(HTTP Keep-Alive)是指在一个TCP连接上可以连续发送多个HTTP请求和响应,
而不需要为每个请求都重新建立连接。
HTTP Keep-Alive 头部
请求头
| HTTP |
|---|
| Connection: keep-alive
Keep-Alive: timeout=60, max=100
|
响应头
| HTTP |
|---|
| Connection: keep-alive
Keep-Alive: timeout=60, max=100
|
参数说明
timeout: 连接保持时间(秒)
max: 最大请求数量
HTTP 版本支持
HTTP/1.0
- 默认短连接
- 需要显式设置
Connection: keep-alive
HTTP/1.1
- 默认长连接
- 使用
Connection: close 关闭连接
HTTP/2
- 多路复用,一个连接处理多个并发请求
- 内置长连接支持
Nginx长链接
反代长连接机制
链接池
| YAML |
|---|
| upstream backend {
server backend1.example.com;
keepalive 32; # 连接池大小
}
|
检测机制:
* Nginx 维护一个连接池,大小由 keepalive 参数控制
* 当收到新请求时,Nginx 会优先检查连接池中是否有空闲的长连接
* 检查顺序:空闲连接 -> 创建新连接 -> 等待连接释放
检测机制
| Text Only |
|---|
| 连接池状态:
├── 空闲连接(idle) - 可立即使用
├── 活跃连接(active) - 正在处理请求
└── 关闭连接(closing) - 准备关闭
|
| Nginx Configuration File |
|---|
| # 启用长连接
keepalive_timeout 65;
keepalive_requests 100;
# 上游服务器长连接
upstream backend {
server backend1.example.com;
server backend2.example.com;
keepalive 32;
}
|
调试和监控
查看连接状态
| Bash |
|---|
| # 查看TCP连接
netstat -an | grep :80
# 查看连接复用情况
ss -s
|