keepalive_disable用于禁用特定老旧浏览器长连接以解决兼容性问题;支持msie6/msie7/msie8/msie9/gecko/safari/konqueror/none等固定关键词,须配置在http或server块中,通过匹配User-Agent触发关闭Keep-Alive行为。

直接在 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 及更早版本(现代 Safari 不受影响)
- konqueror:KDE 桌面环境的旧版浏览器,现已极少见
-
none:显式启用所有浏览器的长连接(可覆盖默认的
msie6)
配置位置与作用范围
必须放在 http 或 server 块中,不能写在 location 内:
- 放在
http块:全局生效,所有虚拟主机都受控 - 放在
server块:仅对该域名或 IP 的站点生效 - 匹配逻辑是解析请求头中的
User-Agent,只要含任一关键词(如MSIE 8.0),Nginx 就在响应中省略Connection: keep-alive,并主动关闭 TCP 连接
典型配置示例
例如某政务系统需兼容 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 请求:仍应保留
keep-alive头,确保未误伤现代浏览器


















