nginx静态资源高可用需三方面协同:本地化托管并高效服务静态文件;部署多节点nginx+keepalived实现vip主备切换;前置cdn+多级缓存+健康监控保障稳定。

静态资源本地化托管 + 高效服务
静态资源(HTML/CSS/JS/图片等)必须由 Nginx 直接读取并返回,不经过后端应用服务器。这能避开 Tomcat 等容器的 IO 和线程开销,发挥 Nginx 的零拷贝和 epoll 优势。
- 把所有静态文件统一放在 Nginx 可访问的目录下,比如
/usr/local/nginx/html/static/或独立挂载的 SSD 存储路径 - 在
server块中用location精确匹配静态路径,避免正则回溯影响性能:location ^~ /static/ { root /usr/local/nginx/html; expires 1h; add_header Cache-Control "public, immutable"; gzip on; } - 启用
expires和Cache-Control减少重复请求;开启gzip压缩文本类资源;对 PNG/JPEG 可考虑ngx_http_image_filter_module做简单裁剪缓存
多节点 Nginx 集群 + Keepalived 主备切换
单台 Nginx 宕机,静态服务就中断。必须部署至少两台 Nginx 服务器,并用 Keepalived 绑定一个虚拟 IP(VIP),对外提供统一入口。
- 两台机器分别安装 Nginx 和 Keepalived,确保静态文件内容完全一致(可用 rsync 或共享 NFS 同步)
- Master 节点配置
state MASTER,priority 设为 100;Backup 节点设为 90;VIP(如 192.168.1.100)绑定在 eth0 上 - Keepalived 检测脚本需同时检查 Nginx 进程存活与端口监听状态,失败时主动降权触发 VIP 切换
- 客户端始终访问 VIP,无需感知后端变化
前置 CDN + 多级缓存兜底
纯靠自建 Nginx 集群仍有带宽和地域延迟瓶颈。建议在 Nginx 前加一层公共 CDN(如 Cloudflare、阿里云 DCDN),把热点静态资源缓存到边缘节点。
- CDN 回源地址指向 Keepalived 的 VIP,实现统一接入
- 设置合理的缓存规则:对带哈希指纹的文件(如
app.a1b2c3.js)缓存长期(1年),无版本号的资源缓存较短(1小时)并配合 ETag 强校验 - Nginx 自身也开启
proxy_cache(如果回源是对象存储或远端静态服务),形成本地磁盘缓存层,降低回源压力
健康监控与自动恢复
高可用不只是“能切”,更是“早发现、快恢复”。静态服务虽轻量,但磁盘满、权限错、配置加载失败都会导致 403/404/500。
- 用
nginx -t检查配置语法,配合 systemd 的ExecReload实现平滑 reload - 通过 Prometheus + nginx-vts-exporter 或官方
stub_status模块采集连接数、请求速率、5xx 错误率等指标 - 对
/static/路径做主动探测(如 curl -I http://vip/static/test.png),异常时触发告警并尝试自动重启 Nginx 进程











