You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

源站宕机时如何调整Nginx超时期限内的并发请求数?

Nginx源站宕机时快速返回缓存并发优化方案

问题根因

你当前的配置存在四个核心限制:

  1. 开启proxy_cache_lock on后默认排队等待源站返回才响应,大量不同缓存key的请求都会触发回源排队
  2. 单worker连接上限过低,整体并发处理能力不足
  3. 仅配置了连接超时,未配置读写超时,异常场景下超时等待时间不可控
  4. 隐式上游配置没有优化长连接和并发上限

具体配置调整

1. 调整nginx.conf的events块参数,提升连接处理能力

把原events块替换为以下配置:

events {
    use epoll;
    multi_accept on;
    worker_connections  10240;
}
  • use epoll 开启Linux平台下最高效的事件处理模型
  • multi_accept on 允许worker进程一次性接收所有 pending 的连接
  • worker_connections 从100调整到10240,单worker可处理的连接数提升100倍,适配高并发场景

2. 在http块中新增显式上游配置,优化回源并发

在http块中(include /etc/nginx/conf.d/*.conf;之前)添加以下配置:

upstream origin_blabla {
    server blabla.com max_conns=100;
    keepalive 64;
    keepalive_requests 1000;
    keepalive_timeout 60s;
}
  • max_conns=100 限制发往源站的最大并发连接为100,避免源站压力过大,可根据源站承载能力调整
  • keepalive 系列配置开启回源长连接复用,减少TCP握手开销,提升回源效率

3. 调整default.conf的location块参数,优化缓存策略

把原location / 块替换为以下配置:

location / {
        #limit_req zone=mylimit;
        #limit_req_dry_run on;
        proxy_cache my_cache;
        proxy_cache_methods POST GET HEAD;
        proxy_connect_timeout 3s;
        proxy_send_timeout 2s;
        proxy_read_timeout 2s;
        proxy_cache_key "$host$request_uri|$request_body";
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504 any;
        proxy_cache_background_update on;
        proxy_cache_background_update_timeout 1s;
        proxy_cache_lock on;
        proxy_cache_lock_timeout 0;
        proxy_cache_lock_age 1s;
        proxy_ignore_headers X-Accel-Expires Expires Set-Cookie Cache-Control;
        proxy_set_header Host $host;
        proxy_pass https://origin_blabla; # 如果源站是HTTP就把https改成http
        proxy_buffering on;
        proxy_cache_valid 200 304 301 10m; 
}

核心调整点说明:

  • 新增proxy_send_timeout/proxy_read_timeout,把整体回源超时从默认的60s压缩到2s,源站异常时更快触发stale缓存返回
  • 新增proxy_cache_lock_timeout 0,只要有可用的stale缓存,所有请求直接返回,不排队等待源站响应
  • 新增proxy_cache_lock_age 1s,异常回源请求最长占用锁1s,避免锁长期被占
  • 新增proxy_cache_use_stale any,所有源站异常场景都优先返回stale缓存,覆盖所有极端情况
  • proxy_pass改为显式上游,复用长连接提升回源并发

额外说明

如果调整后还是出现单时间窗口仅6个请求的情况,是浏览器对单个HTTPS域名的默认并发请求限制(Chrome/Edge/Firefox默认都是6个),和Nginx配置无关,可通过前端静态资源拆分到多个子域名的方式解决。

内容的提问来源于stack exchange,提问作者user3881870

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 07:54:04