keepalive_timeout需分路径设置:主站静态资源设15秒,媒体大文件设8~10秒,小图标沿用15秒或微调至18秒;并同步配置keepalive_requests、proxy_http_version 1.1及connection头清理。

keepalive_timeout 不能“一刀切”,必须按静态资源的访问特征分路径设置,否则容易造成连接堆积或频繁重连。
主站静态资源(HTML/JS/CSS/字体等)设为 15 秒
这类资源集中在 SPA 首屏几秒内并发加载(常达 20+ 请求),需要足够长的复用窗口,但又不能过长。设为 15 秒能覆盖典型加载耗时(≤3 秒),并预留约 12 秒缓冲应对弱网重试、懒加载或预加载请求。实际配置示例如下:
- location / {
- keepalive_timeout 15 15;
- keepalive_requests 200;
- # 同时确保 proxy_http_version 1.1 和 Connection 头清理(若反向代理)
- }
媒体类大文件(MP4/PNG/字体等)单独设为 8~10 秒
视频、高清图、woff2 字体等单次请求耗时长、并发密度低,且浏览器通常不会在下载完后立即复用连接。过长 timeout 容易让连接滞留空闲状态,被中间设备(如运营商 NAT)提前中断,反而触发重连。建议在匹配 location 中收紧 timeout:
- location ~ \.(mp4|webm|png|jpg|woff2|ttf)$ {
- keepalive_timeout 8 8;
- sendfile on;
- tcp_nopush on;
- }
图标与小资源(ICO、SVG、小 PNG)可沿用主站策略或略放宽
favicon.ico、内联 SVG、小尺寸按钮图标等体积小、请求频次高,复用价值高。无需单独降 timeout,保持与主站一致(15 秒)即可;若站点存在大量高频小图请求(如监控看板),可微调至 18 秒,但不建议超过 20 秒,避免与云负载均衡器超时(如 AWS ALB 默认 60 秒,但探测延迟可能导致 RST)错位。
必须同步启用的三项配套措施
单独调 keepalive_timeout 效果有限,需配合以下配置才能真正生效:
- keepalive_requests 设为 100~300:防止异常请求(如断点续传失败)无限占用连接,也避免设太低(如 10)导致连接未空闲就被强制关闭;
- location 块中显式声明 proxy_http_version 1.1,并加 proxy_set_header Connection ''(用于反向代理场景),确保 HTTP/1.1 Keep-Alive 协商成功;
- 使用双参数写法 keepalive_timeout 15 15,使响应头 Keep-Alive: timeout=15 准确同步给浏览器,提升两端行为一致性。











