Nginx是大型架构核心,下面我详解Nginx动静分离技术@mikechen
Nginx 动静分离

“动静分离”是按请求内容和处理方式,将服务职责划分为两类:
静态资源:通常无需根据用户或业务状态实时生成,例如图片、CSS、JavaScript、字体文件、视频文件等。
动态请求:需要执行业务逻辑或查询数据,例如用户认证、订单处理、搜索和个性化页面。
Nginx 动静分离原理
客户端请求先到达 Nginx,Nginx 根据域名、URI、文件类型、请求方法等规则选择处理路径。

请求进入 Nginx
│
▼
匹配 location
│
├── 静态路径 → 找到文件 → 返回内容
│
└── API 路径 → 代理到后端 → 转发后端响应
对于静态请求,Nginx 根据 root 或 alias 指令定位文件,并直接将内容返回给客户端。
由于 Nginx 擅长处理大量并发连接和文件传输,这种方式能减少应用服务器参与静态内容处理的开销。
于动态请求,Nginx 通常使用 proxy_pass 将请求转发到后端服务,并可传递客户端地址、原始协议等请求信息。
请求链路可概括为:
1.静态请求
客户端 → Nginx → 静态资源服务器或文件目录;
当然,对应企业级架构,都会接入CDN。
用户
|
↓
CDN
|
↓
Nginx集群
|
┌─────────────┴─────────────┐
↓ ↓
静态资源OSS 后端服务集群
图片/视频 Spring Boot
JS/CSS Dubbo
Redis
MySQL
此时,用户优先从距离较近的边缘节点获取文件;
2.动态请求
客户端 → Nginx → 应用服务器 → 数据库或其他业务服务。
Nginx 动静分离实战

server {
listen 80;
server_name example.com;
# 静态资源目录:/var/www/site/
location ~* \.(css|js|png|jpg|jpeg|gif|svg|ico|woff2?)$ {
root /var/www/site;
expires 7d;
add_header Cache-Control "public";
try_files $uri =404;
}
# 动态请求转发到后端应用
location /api/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 其他页面请求交由应用处理
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
动静分离适用于大多数网站和 Web 应用,尤其是图片、脚本、样式等资源请求量较高,而业务处理又需要独立扩展的系统。
通过合理的 location 规则 + expires + proxy_cache,你可以轻松把后端压力降低 70% 以上。
以上