Nginx是大型架构核心,下面重点详解Nginx动静分离架构@mikechen
Nginx动静分离
动静分离,指将“动态内容”(如需要服务器渲染、数据库交互、会话处理的请求)。
与“静态内容”(如HTML静态页面、CSS、JavaScript、图片、字体、视频等),分开处理。

Nginx负责高效地提供静态资源,利用内核缓存、sendfile、异步IO等特性减少上下文切换与系统调用。
动态请求,通过反向代理或负载均衡转发到后端应用服务器(如Tomcat、Gunicorn、Node.js等)。
这种分工使得每类服务,能在最适合的环境中运行,减少资源竞争、降低响应时延。
Nginx动静分类架构
如下图所示:

静态资源分离架构
静态资源通过 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 哈希等)进行分发。

动态内容缓存需谨慎:对可缓存的接口采用短期缓存或分段缓存,避免数据一致性问题。
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面试题总结》