插件窝 干货文章 nginx keepalive如何使用

nginx keepalive如何使用

Keepalive 连接 Nginx 服务器 320    来源:    2025-04-23

Nginx Keepalive 配置指南

Keepalive 是 HTTP 协议中的一个重要特性,它允许客户端和服务器之间的 TCP 连接在完成一次请求/响应后保持打开状态,以便后续请求可以复用这个连接,从而减少 TCP 握手和慢启动的开销,提高性能。

基本配置

在 Nginx 中,keepalive 相关的配置主要在以下几个指令中:

1. 客户端到 Nginx 的 keepalive

http {
    keepalive_timeout  65;  # 保持连接的超时时间,单位秒
    keepalive_requests 100; # 一个连接上最多可以发送的请求数

    server {
        listen 80;

        location / {
            # 其他配置...
        }
    }
}
  • keepalive_timeout:设置客户端连接保持活动的超时时间。第一个参数设置超时时间,第二个可选参数设置"Keep-Alive: timeout=time"响应头字段
  • keepalive_requests:设置一个 keepalive 连接上可以服务的最大请求数

2. Nginx 到上游服务器的 keepalive

当 Nginx 作为反向代理时,可以配置到上游服务器的 keepalive 连接:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;

    keepalive 32;  # 保持到每个上游服务器的空闲连接数
}

server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        # 其他代理配置...
    }
}

关键配置说明: - keepalive:设置每个 worker 进程与上游服务器保持的空闲 keepalive 连接的最大数量 - proxy_http_version 1.1:强制使用 HTTP/1.1,因为 HTTP/1.0 不支持 keepalive - proxy_set_header Connection "":清除 Connection 头,防止传递错误的 keepalive 信息

高级配置

1. 调整 keepalive 超时

http {
    keepalive_timeout 30s 25s; # 服务器保持30秒,告诉客户端保持25秒
}

2. 针对特定 location 的配置

server {
    location /api/ {
        keepalive_timeout 120s;
        keepalive_requests 500;
    }
}

3. 监控 keepalive 状态

可以通过 Nginx 的 stub_status 模块监控 keepalive 连接:

server {
    location /nginx_status {
        stub_status;
        allow 127.0.0.1;
        deny all;
    }
}

访问 /nginx_status 可以看到类似如下的信息:

Active connections: 291 
server accepts handled requests
 16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106 

其中: - Active connections: 当前活跃连接数 - Waiting: 保持 keepalive 状态的连接数

最佳实践

  1. 合理设置 keepalive_timeout

    • 对于高并发短连接场景,可以设置较小的值(如5-15秒)
    • 对于 API 或长连接场景,可以设置较大的值(30-120秒)
  2. 调整 keepalive_requests

    • 默认值100对于现代应用可能偏小,可以考虑增加到1000或更高
  3. 上游服务器 keepalive

    • 确保上游服务器也支持 keepalive
    • keepalive 值应该根据上游服务器性能和负载情况调整
  4. 监控和调优

    • 监控 keepalive 连接的使用情况
    • 根据实际负载调整参数
  5. 注意内存使用

    • 每个 keepalive 连接都会占用一定内存,过多的空闲连接会增加内存压力

通过合理配置 keepalive,可以显著减少 TCP 连接建立的开销,提高服务器性能和响应速度。