Nginx是大型架构核心,下面重点详解Nginx动静分离实战@mikechen
Nginx动静分离
动静分离,就是将网站的“静态资源”与“动态请求”分开处理的架构模式。
通过 Nginx,我们让静态资源直接由 Nginx 从磁盘读取并返回,而动态请求则转发给后端的应用服务器(如 Tomcat、Spring Boot)。

静态资源 (Static):图片、JS、CSS、HTML 文件、字体等。
这些文件内容固定,不需要服务器进行逻辑运算。
动态请求 (Dynamic):JSP、PHP、Python、Go 或 Java 接口。
这些请求需要 CPU 计算、查询数据库或调用其他微服务。
Nginx动静分类架构
Nginx 作为前置服务器,通过 location 匹配规则进行分流。
正则匹配:发现后缀是 .jpg, .js 等,直接在 Nginx 本地磁盘找文件。
静态资源直接由Nginx本地或分布式文件存储(如CDN、对象存储)返回。
反向代理:发现是接口路径,才透传给后端。

如下所示:
server {
listen 80;
server_name www.bat-arch.com;
# 1. 动态请求:转发给后端应用服务器
location /api/ {
proxy_pass http://java_backend_pool;
proxy_set_header Host $host;
}
# 2. 静态资源:正则匹配后直接读取本地目录
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /usr/share/nginx/html/static;
expires 30d; # 缓存 30 天
add_header Cache-Control "public, no-transform";
}
}
Nginx 收到请求后,根据 URL 路径 或 文件后缀 判断是静态还是动态。
静态:直接用 sendfile 零拷贝机制从磁盘读取文件,返回给客户端(不走用户态,几乎无 CPU 开销)。
动态:通过 proxy_pass 转发给后端(如 upstream 集群),后端处理完再返回。
额外加成:gzip 压缩、expires 浏览器缓存、CDN 加速,进一步放大性能。
Nginx动静分离性能
动静分离带来的性能提升来自多方面:

首先,静态资源由Nginx直接响应,消除后端应用的上下文切换与业务处理开销;
Nginx擅长处理大量短连接和并发静态请求,支持高效的异步事件驱动模型、sendfile、gzip压缩。
其次,Nginx 的高并发处理能力和I/O优化(如零拷贝)降低了CPU和内存占用;
缓存头控制(Cache-Control、ETag、Expires)及内置缓存(proxy_cache),从而减少磁盘与网络I/O并提升响应效率。
第三,通过合理的缓存策略与CDN接入,可将大量请求在边缘节点或Nginx层拦截,显著降低源站压力。
一句话:动静分离是“花小钱办大事”的神器,几乎所有大厂(如阿里、腾讯、字节)都在用。