插件窝 干货文章 Nginx中HTTP的keepalive怎么配置

Nginx中HTTP的keepalive怎么配置

Keepalive 连接 配置 timeout 627    来源:    2025-04-27

Nginx中HTTP Keepalive配置指南

HTTP Keepalive是一种保持TCP连接在完成一次请求后不立即关闭,以便后续请求可以复用该连接的技术。在Nginx中正确配置Keepalive可以显著提高性能,减少TCP连接建立和关闭的开销。

主要配置参数

1. 启用Keepalive

httpserverlocation块中配置:

keepalive_timeout 65;  # 设置保持连接的超时时间,单位秒
keepalive_requests 100; # 单个连接上允许的最大请求数

2. 上游服务器(upstream)Keepalive

对于反向代理场景,可以配置与上游服务器的Keepalive连接:

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

    # 保持与上游服务器的连接池
    keepalive 32;  # 每个worker保持的最大空闲连接数
}

server {
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;  # 必须使用HTTP/1.1
        proxy_set_header Connection "";

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

详细参数说明

  1. keepalive_timeout

    • 默认值:75秒
    • 第一个参数:客户端连接保持活动的超时时间
    • 第二个可选参数:在响应头中发送"Keep-Alive: timeout=time"的值
    keepalive_timeout 65 60;
    
  2. keepalive_requests

    • 默认值:100
    • 设置一个keepalive连接上可以服务的最大请求数
  3. upstream keepalive

    • 设置每个worker进程与上游服务器保持的最大空闲连接数
    • 这些连接会被保留在连接池中以备复用

最佳实践建议

  1. 对于高流量网站:

    keepalive_timeout 15;  # 根据实际流量调整
    keepalive_requests 1000;
    
  2. 对于API服务器:

    keepalive_timeout 30s;
    keepalive_requests 500;
    
  3. 对于反向代理:

    upstream backend {
       keepalive 64;
       # ...其他配置
    }
    
  4. 监控和调整:

    • 使用netstat -an | grep ESTABLISHED监控连接状态
    • 根据实际负载调整keepalive_timeout和keepalive_requests

注意事项

  1. 过长的keepalive_timeout可能会导致服务器资源浪费
  2. 在HTTP/1.0中,需要在请求头中明确包含"Connection: keep-alive"
  3. HTTP/1.1默认启用keepalive,除非明确指定"Connection: close"
  4. 对于负载均衡场景,确保所有后端服务器支持keepalive

通过合理配置这些参数,可以显著提高Nginx服务器的性能和资源利用率。