Nginx动静分离架构详解(性能提升5倍关键)

Nginx是大型架构核心,下面重点详解Nginx动静分离架构@mikechen

Nginx动静分离

动静分离,指将“动态内容”(如需要服务器渲染、数据库交互、会话处理的请求)。

与“静态内容”(如HTML静态页面、CSS、JavaScript、图片、字体、视频等),分开处理。

Nginx动静分离架构详解(性能提升5倍关键)

Nginx负责高效地提供静态资源,利用内核缓存、sendfile、异步IO等特性减少上下文切换与系统调用。

动态请求,通过反向代理或负载均衡转发到后端应用服务器(如Tomcat、Gunicorn、Node.js等)。

这种分工使得每类服务,能在最适合的环境中运行,减少资源竞争、降低响应时延。

 

Nginx动静分类架构

如下图所示:

Nginx动静分离架构详解(性能提升5倍关键)

静态资源分离架构

静态资源通过 Nginx 自身读取并缓存,通常放在单独目录或独立域名/子域名下。

location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg|webp|html)$ { ... expires 30d; add_header Cache-Control "public"; }

静态资源缓存策略包括浏览器缓存、Nginx 代理缓存、CDN 缓存等组合使用。

静态资源长期缓存,动态接口短期缓存(如 5–60 秒,或按版本命名实现缓存命中与回滚)。

版本化静态资源名称(如 app.v1.css、app.v2.js),确保更新即时生效。

动态请求分流架构

动态请求通过 upstream 定义后端应用节点,结合负载均衡策略(轮询、加权、最少连接、IP 哈希等)进行分发。

Nginx动静分离架构详解(性能提升5倍关键)

动态内容缓存需谨慎:对可缓存的接口采用短期缓存或分段缓存,避免数据一致性问题。

upstream backend_upstream { server app1.internal:8080; server app2.internal:8080; server app3.internal:8080; }

location /api/ { proxy_pass http://backend_upstream; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 60; proxy_connect_timeout 5; }

将动态请求和静态资源分离的改动分阶段进行:

先实现静态资源域名分离和缓存策略优化;

再引入后端 Upstream 集群与健康检查,最后接入 CDN。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧