Nginx是大型架构必备技能,下面我重点详解Nginx动静分离@mikechen
Nginx动静分离
在高并发网站与分布式应用中,“动静分离”已成为常见且必要的架构实践。
动静分离指将静态内容(如 HTML、CSS、JavaScript、图片、视频等)与动态内容(如 API、模板渲染、业务逻辑等)。
分别由不同服务、或不同部署单元提供。
典型架构包括:

客户端 → Nginx 反向代理(入口);
Nginx 将静态资源直接响应或代理至 CDN/对象存储;
动态请求由 Nginx 转发至后端应用服务器(如 Tomcat、Node、PHP-FPM 等)或微服务;
可配置缓存层(Nginx 缓存或 CDN)与负载均衡策略,结合健康检查与熔断。
Nginx动静分离原理
请求匹配与路由,Nginx 基于 location、try_files、rewrite 等指令对 URL 做模式匹配,决定请求处理路径。
静态资源通常通过正则或后缀匹配(如 .(css|js|png|jpg)$),直接定位文件系统、或上游静态服务。

Nginx 直接从本地文件系统读取静态文件,利用内核 sendfile() 零拷贝机制(绕过用户空间)。
并发能力强、延迟低(通常 <10ms)。
动态代理流程:不匹配静态的请求,使用 proxy_pass 转发给 upstream 后端。
Nginx 作为反向代理完成负载均衡、连接复用和缓冲,减少后端应用服务器压力。
http {
# 开启高效文件传输模式
sendfile on;
tcp_nopush on;
upstream backend_server {
server 192.168.1.10:8080; # Tomcat/应用服务器
server 192.168.1.11:8080;
}
server {
listen 80;
server_name example.com;
# 1. 静态资源路由:匹配以 .jpg, .png, .css, .js 等结尾的请求
location ~* \.(jpg|jpeg|png|gif|css|js|ico|html)$ {
root /data/www/static;
expires 30d; # 设置浏览器缓存30天
add_header Cache-Control "public";
access_log off; # 静态资源通常关闭访问日志以提高性能
}
# 2. 动态请求路由:转发给后端应用服务器
location /api/ {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 3. 默认根路径
location / {
root /data/www/html;
index index.html;
}
}
}
在location块中使用正则表达式(如~ .(jpg|css)$)区分请求类型。
静态匹配优先级高,直接返回,否则转发。
