keepalive_disable是专为兼容旧浏览器设计的静态“刹车”指令,用于在http或server块中禁用ie6–ie9、firefox10前、safari5.x等特定ua的长连接,避免响应错乱、跳转失败或连接重置。

直接在 http 或 server 块中配置 keepalive_disable,就能让 Nginx 对匹配的老旧浏览器禁用长连接,避免响应错乱、跳转失败或连接重置等问题。它不是性能优化工具,而是专为兼容性兜底设计的静态“刹车”指令。
支持哪些老旧浏览器关键词
该指令只识别预设的固定关键词(不区分大小写),无法自定义 UA 字符串或使用正则:
- msie6 / msie7 / msie8 / msie9:对应 IE 6–9,尤其 IE6–IE8 在 POST 后复用连接极易出问题
- gecko:特指 Firefox 10 以前版本(如 3.x–9.x),存在连接状态竞争条件
- safari:仅影响 Safari 5.x 及更早版本(现代 Safari 不受影响)
- konqueror:KDE 桌面环境旧版浏览器,现已极少见
-
none:显式启用所有浏览器的长连接,可覆盖默认的
msie6
配置位置与作用范围
必须放在 http 或 server 块中,不能写在 location、if 或 map 内:
- 写在
http块:全局生效,影响所有虚拟主机 - 写在
server块:仅对该域名或 IP 的站点生效 - 若
http和server中都配置,server块的设置会覆盖http块
典型配置示例
例如某政务系统需兼容 IE8,但上传后跳转失败,日志出现 “connection reset”,可这样配置:
全局禁用(适用于多个站点):
http {
keepalive_disable msie6 msie7 msie8;
# 其他核心配置...
}
单站点禁用(推荐,更精准):
server {
listen 80;
server_name example.com;
keepalive_disable msie8 gecko;
# 其他配置...
}
验证是否生效
用目标浏览器发起请求并检查响应头:
- 模拟 IE8 请求:
curl -H "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0;)" http://example.com/ - 响应中应无
Connection: keep-alive,而有Connection: close - 用 Chrome 或 Firefox 发起相同请求,仍应保留
keep-alive头,确认未误伤现代浏览器











