静态资源请求通常不需负载均衡,因nginx可直接高效响应(吞吐达6000+ qps),远超tomcat等动态服务器;应采用动静分离,仅对动态请求(如.jsp、/api/)做后端服务负载均衡,静态资源由本地nginx直供或交cdn分发。

静态资源请求本身一般不需“负载均衡”,而是靠动静分离 + 多节点静态服务部署来实现高可用与性能分担。Nginx 本身不是为静态资源做负载均衡设计的,它更适合作为静态资源的直接提供者;真正需要负载均衡的是后端动态服务(如 Tomcat、Node.js 等)。但如果你确实有多个 Nginx 实例共同对外提供静态资源,并希望前端流量在它们之间分发,那才是配置“静态资源的负载均衡”——这本质是对 Nginx 反向代理层做负载均衡,而非对静态文件本身。
为什么静态资源通常不走负载均衡?
因为静态资源(HTML/CSS/JS/图片等)可直接由单台 Nginx 高效响应,吞吐远高于应用服务器(比如 Nginx 每秒处理 6000+ 请求,Tomcat 约 1000)。所以常规架构是:
- Nginx 自己 serve 所有静态资源(根目录
root /usr/share/nginx/html) - 只把
.jsp、/api/、/user/这类动态路径用proxy_pass转给后端集群 - 真正的负载均衡对象是这些后端服务,不是静态文件
若真要多台 Nginx 均匀分发静态请求(即“静态服务集群”)
这时你需要在最前端加一层负载均衡器(比如另一台 Nginx、LVS 或云厂商 SLB),将用户请求分发到多个静态 Nginx 节点。各节点内容需保持一致(可通过 rsync、NFS、对象存储挂载等方式同步)。
- 前端 LB 配置示例(upstream 指向多个静态 Nginx):
server 192.168.10.10:80 weight=3;
server 192.168.10.11:80;
server 192.168.10.12:80 backup;
}
- 再在 server 块中统一 proxy_pass 到该组:
proxy_pass http://static_nodes;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
更推荐的生产实践:动静分离 + 动态服务负载均衡
这才是 Nginx 最典型、最高效的用法:
- 所有静态资源由本地 Nginx 直接响应(不转发)
- 所有动态请求(如
location ~ \.jsp$或location ^~ /api/)交给 upstream 后端集群 - upstream 中配置加权轮询、least_conn 或 ip_hash 等策略
- 例如:
least_conn;
server 192.168.121.12:8080 weight=2;
server 192.168.121.10:8080;
}
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
location ~ \.jsp$ {
proxy_pass http://app_servers;
}
}
补充:CDN 是静态资源的终极“负载均衡”方案
对于图片、JS、CSS 等通用静态资源,实际生产中几乎都交由 CDN 分发。CDN 边缘节点自动完成全球就近调度、缓存、带宽分流,比自建 Nginx 集群更稳定、更快、成本更低。Nginx 只需专注做好源站(Origin Server)即可。











