欢迎光临殡葬网
详情描述

1. HTTP/1.1 默认行为

默认情况下,HTTP/1.1 使用持久连接(长连接),HTTP/1.0 默认使用短连接。

2. 核心配置指令

控制长连接

http {
    # 开启长连接(默认已开启)
    keepalive_timeout 75s;  # 客户端长连接保持时间
    keepalive_requests 100;  # 一个长连接上允许的最大请求数

    upstream backend {
        server backend1.example.com;
        keepalive 32;  # 与上游服务器保持的连接数
    }
}

强制短连接

要强制使用短连接,可以:

location / {
    # 方法1:设置 keepalive_timeout 为 0
    keepalive_timeout 0;

    # 方法2:设置 Connection 头为 close
    add_header Connection "close";
}

3. 不同场景的配置示例

A. 静态资源服务器(推荐长连接)

server {
    listen 80;
    server_name example.com;

    keepalive_timeout 65s;
    keepalive_requests 1000;  # 静态资源可以设置更多请求

    location / {
        root /var/www/html;
        # 静态资源适合长连接
    }
}

B. API 服务器(根据需求调整)

server {
    listen 443 ssl;
    server_name api.example.com;

    # 中等长度的连接保持
    keepalive_timeout 30s;
    keepalive_requests 100;

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

        # 与后端的长连接设置
        proxy_connect_timeout 5s;
        proxy_read_timeout 30s;
    }
}

C. 代理到上游服务

upstream backend_servers {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;

    # 保持32个空闲连接到每个后端服务器
    keepalive 32;
}

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

        # 重置后端连接超时
        proxy_connect_timeout 5s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

4. 最佳实践建议

使用长连接的场景:

高并发网站 - 减少TCP握手开销 API服务器 - 频繁的小请求 负载均衡器 - 与后端服务器保持连接 静态资源服务器

使用短连接的场景:

安全敏感应用 - 每个请求独立连接 低频访问 - 避免保持不必要的连接 测试/调试环境

5. 监控连接状态

# 查看当前连接状态
netstat -an | grep :80 | awk '{print $6}' | sort | uniq -c

# 查看Nginx连接统计
nginx -T 2>/dev/null | grep keepalive

6. 完整示例配置

http {
    # 全局长连接设置
    keepalive_timeout 65s;
    keepalive_requests 100;

    # 限制每个worker的连接数
    worker_connections 1024;

    upstream app_backend {
        server app1:8080;
        server app2:8080;
        keepalive 16;
    }

    server {
        listen 80;

        # 静态资源 - 长连接
        location ~* \.(jpg|png|css|js)$ {
            root /var/www/static;
            keepalive_timeout 300s;
            keepalive_requests 1000;
        }

        # API接口 - 中等长连接
        location /api/ {
            proxy_pass http://app_backend;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            keepalive_timeout 30s;
        }

        # 管理后台 - 短连接(安全考虑)
        location /admin/ {
            proxy_pass http://admin_backend;
            keepalive_timeout 0;
            add_header Connection "close";
        }
    }
}

选择长连接还是短连接取决于:

性能要求 - 高并发用长连接 安全需求 - 敏感数据可考虑短连接 资源限制 - 连接数限制 应用类型 - 静态/动态内容
相关帖子