必须清空connection头,因为nginx默认以http/1.0转发并添加connection: close,导致后端关闭长连接;需配合upstream keepalive、proxy_http_version 1.1和proxy_set_header connection ""三者协同生效。

要让 Nginx 与后端服务之间建立真正复用的长连接,proxy_set_header Connection "" 是关键一环,但它必须和 upstream 的 keepalive 配置、HTTP 版本设置协同生效——单独使用它不会起作用。
为什么必须清空 Connection 头
Nginx 默认以 HTTP/1.0 模式转发请求,并主动添加 Connection: close 头。即使后端支持 Keep-Alive,只要收到这个头,就会在响应后立即关闭 TCP 连接。清空 Connection 头(即设为 "")等于不透传任何 connection 指令,让后端按协议默认行为处理:HTTP/1.1 下自动启用长连接。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
配套的三项必要配置缺一不可
-
upstream 块中启用 keepalive:例如
keepalive 32;,表示每个 worker 进程最多缓存 32 个空闲长连接到该 upstream 组 -
location 中指定 HTTP/1.1:必须写
proxy_http_version 1.1;,否则 Nginx 仍走 HTTP/1.0,keepalive 无效 -
清除 Connection 头:必须写
proxy_set_header Connection "";,避免透传客户端带来的close或其他干扰值
典型配置示例
以下是一个可直接使用的最小有效配置片段:
upstream backend {server 10.0.1.10:8080;
keepalive 64;
}
server {
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
验证是否生效的方法
- 抓包观察后端响应头是否含
Connection: keep-alive(注意不是由 Nginx 添加,而是后端自身返回) - 检查 Nginx 所在机器的
netstat -ant | grep :8080 | grep ESTABLISHED,连接数应稳定在 keepalive 数量级,而非随请求激增 - 对比开启前后端口 TIME_WAIT 数量,明显下降说明复用成功










