默认情况下,HTTP/1.1 使用持久连接(长连接),HTTP/1.0 默认使用短连接。
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";
}
server {
listen 80;
server_name example.com;
keepalive_timeout 65s;
keepalive_requests 1000; # 静态资源可以设置更多请求
location / {
root /var/www/html;
# 静态资源适合长连接
}
}
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;
}
}
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;
}
}
# 查看当前连接状态
netstat -an | grep :80 | awk '{print $6}' | sort | uniq -c
# 查看Nginx连接统计
nginx -T 2>/dev/null | grep keepalive
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";
}
}
}
选择长连接还是短连接取决于:
性能要求 - 高并发用长连接 安全需求 - 敏感数据可考虑短连接 资源限制 - 连接数限制 应用类型 - 静态/动态内容