轮询是nginx upstream默认策略,需通过location精确匹配静态路径、proxy_pass正确转发、upstream纯轮询+健康检查、后端轻量化配置及proxy_cache缓存协同实现高效静态资源分发。

轮询是 Nginx upstream 的默认分发策略,用它处理静态请求时,核心在于“让每个静态节点平等、顺序地承接请求”,同时确保后端真正能高效响应静态资源。关键不是轮询本身多复杂,而是上下游配置是否闭环。
静态请求必须先被准确识别和分离
轮询只管转发,不负责判断请求类型。所以第一步得在 server 块里用 location 精确匹配静态路径:
- 推荐写法:location ^~ /static/ 或 location ~* \.(js|css|png|jpg|gif|woff2)$
- 避免用 location / 这种宽泛匹配,否则动态请求也可能误入静态 upstream
- 匹配成功后,必须用 proxy_pass http://static_servers/(注意末尾斜杠),防止路径重复拼接
upstream 中启用纯轮询并做好健康检查
默认就是轮询,无需额外声明,但需显式配置容错机制:
- 每台静态服务器写成 server 192.168.10.10:80 max_fails=3 fail_timeout=30s;
- max_fails 控制连续失败次数,fail_timeout 定义“失效窗口”,超时后自动重试
- 不要加 weight、ip_hash 等参数——加了就不是纯轮询了
- 所有节点端口、协议保持一致(如都走 HTTP 80,不混 HTTPS)
后端静态节点自身要配得“够轻、够快”
轮询只是分发,真正扛压靠的是每个节点的静态服务能力:
- 每台 Nginx 都要设好 root /data/www/static;,且目录权限可读
- 开启 sendfile on;、tcp_nopush on; 提升文件传输效率
- 配 gzip on; 和合理级别(如 gzip_comp_level 4;)压缩文本类资源
- 设置强缓存头:expires 7d; 或 add_header Cache-Control "public, immutable, max-age=604800";
可叠加一层缓存减少回源压力
即使用了轮询,高频静态资源仍可能反复打到后端。在主 Nginx 上加 proxy_cache 能显著降载:
- 定义缓存区:proxy_cache_path /var/cache/nginx/static_cache levels=1:2 keys_zone=STATIC_CACHE:10m max_size=1g inactive=7d;
- 在 location 块中启用:proxy_cache STATIC_CACHE; 和 proxy_cache_valid 200 304 7d;
- 缓存键建议包含 URI 和 Host:proxy_cache_key "$scheme$request_method$host$request_uri";











