Nginx Keepalive 配置详解
Nginx Keepalive 配置涉及客户端与后端上游连接优化。通过设置 keepalive_timeout 和 keepalive_requests 控制客户端空闲超时与请求数。Upstream 模块配合 proxy_http_version 1.1 实现反向代理长连接复用。需根据后端支持情况及系统资源合理调整参数,避免文件描述符耗尽或会话失效。排查时可结合 curl 响应头与 nginx_status 监控连接状态。

Nginx Keepalive 配置涉及客户端与后端上游连接优化。通过设置 keepalive_timeout 和 keepalive_requests 控制客户端空闲超时与请求数。Upstream 模块配合 proxy_http_version 1.1 实现反向代理长连接复用。需根据后端支持情况及系统资源合理调整参数,避免文件描述符耗尽或会话失效。排查时可结合 curl 响应头与 nginx_status 监控连接状态。

在 HTTP 协议中,keepalive(长连接)允许客户端和服务器在同一个 TCP 连接上进行多次请求和响应,避免频繁建立和断开连接,提高性能。
在 Nginx 里,keepalive 通常分为两类:
这是指客户端(浏览器/请求工具)与 Nginx 之间的长连接。
http {
keepalive_timeout 75s 75s;
keepalive_requests 100;
...
}
Keep-Alive: timeout=<N> 响应头的值(设置给客户端的建议时间)。keepalive_timeout 60s 60s;keepalive_requests 100;如果 Nginx 作为反向代理,需要与后端服务器(如 Tomcat、Node、Go 服务)保持连接,减少连接建立/销毁开销。
upstream backend {
server 127.0.0.1:8080;
# 指定最多保留多少个与每个后端服务器的空闲连接
keepalive 32;
}
keepalive 16;proxy_http_version
如果要使用 HTTP/1.1 的长连接,需要设置:
proxy_http_version 1.1;
proxy_set_header Connection "";
http {
keepalive_timeout 60s 60s;
keepalive_requests 100;
upstream backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
keepalive 后,Nginx 会向后端重用连接,如果后端不支持可能出错;keepalive_timeout 和 keepalive_requests;Nginx 的 upstream keepalive 只是指定空闲连接池的大小。注意以下高阶点:
示例:
upstream backend {
server 10.0.0.1:8000;
server 10.0.0.2:8000;
keepalive 32;
# 每台后端各 32 个连接
}
对于 stream 模块(比如 tcp/udp 代理),也支持 keepalive,不过配置方式略有不同。
stream {
server {
listen 3306;
proxy_pass mysql_backend;
proxy_connect_timeout 1s;
proxy_timeout 10m;
}
upstream mysql_backend {
server 192.168.0.10:3306;
server 192.168.0.11:3306;
# stream 模块下并无 keepalive 配置,核心还是连接超时
}
}
stream keepalive 仅通过超时控制连接维持时间。
curl -v,请求 Nginx,看 Do you get Connection: keep-alive in response header?Linux 下可以使用以下命令
netstat -antp | grep nginx
lsof -p <nginx_worker_pid> | wc -l
通过 Nginx 的 stub_status 模块可以查看活动连接数量:
location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
示例:
curl -I http://your.domain/
结果中有
Connection: keep-alive
就 OK。
worker_processes、系统 ulimit 和后端配置,测算合适的 keepalive 池大小http {
keepalive_timeout 30 30;
keepalive_requests 1000;
upstream apiservers {
server 10.0.1.2:9000;
server 10.0.1.3:9000;
keepalive 64;
}
server {
...
location /v1/ {
proxy_pass http://apiservers;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
http {
keepalive_timeout 120 120;
keepalive_requests 500;
upstream backend {
server 127.0.0.1:9000;
keepalive 8;
}
}

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online