keepalive_disable指令用于针对IE6–9、旧版Firefox(gecko)、Safari 5.x前及Konqueror等特定老旧浏览器禁用长连接,避免响应错乱或连接重置;仅支持预设关键词、须配置在http/server块中,不支持location或自定义UA。

直接在 Nginx 的 http 或 server 块中写入 keepalive_disable 指令,就能让 Nginx 对特定旧浏览器禁用长连接,避免响应错乱、跳转失败或连接重置等问题。它不是性能优化手段,而是专为兼容性兜底设计的“刹车”机制。
哪些旧设备能被识别并控制
该指令只认固定关键词,不支持正则、自定义 UA 字符串或模糊匹配,大小写不敏感:
- msie6 / msie7 / msie8 / msie9:对应 IE 6–9,尤其 IE6–IE8 在 POST 后复用连接极易出问题
- gecko:特指 Firefox 10 以前版本(如 Firefox 3.x–9.x),存在连接状态竞争
- safari:仅影响 Safari 5.x 及更早版本(常见于 macOS 10.6 或旧版 iOS)
- konqueror:KDE 桌面环境遗留浏览器,现已极少见
- none:显式启用所有浏览器的长连接(可覆盖默认的 msie6)
配置位置与作用范围
必须放在 http 块或 server 块中,不能写在 location 内:
- 放在
http块:全局生效,所有虚拟主机都受控 - 放在
server块:仅对该域名或 IP 的站点生效,适合多站点混合兼容场景 - 若 http 和 server 块同时配置,server 块的设置会覆盖 http 块的全局配置
典型配置示例
例如某内部系统仍需兼容 IE8,但上传后页面跳转失败,日志出现 “connection reset”,可这样配置:
server {
listen 443 ssl;
server_name legacy.example.com;
keepalive_disable msie6 msie7 msie8;
# 其他 SSL、location 等配置
}该配置生效后,只要请求头中 User-Agent 包含 MSIE 8.0 或 Gecko/20050111 等标识,Nginx 就不会返回 Connection: keep-alive,而改用 Connection: close,并在响应结束后立即关闭 TCP 连接。
验证是否生效
用 curl 模拟旧设备请求并检查响应头:
- 模拟 IE8:
curl -H "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0;)" https://legacy.example.com/→ 应无Connection: keep-alive,且含Connection: close - 对比 Chrome:
curl -H "User-Agent: Mozilla/5.0 (Macintosh)" https://legacy.example.com/→ 仍应保留keep-alive头


















