Nginx动静分离技术详解(原理+架构+实战)

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

Nginx 动静分离

Nginx动静分离技术详解(原理+架构+实战)-mikechen

 

“动静分离”是按请求内容和处理方式,将服务职责划分为两类:

静态资源:通常无需根据用户或业务状态实时生成,例如图片、CSS、JavaScript、字体文件、视频文件等。

动态请求:需要执行业务逻辑或查询数据,例如用户认证、订单处理、搜索和个性化页面。

 

Nginx 动静分离原理

客户端请求先到达 Nginx,Nginx 根据域名、URI、文件类型、请求方法等规则选择处理路径。

Nginx动静分离技术详解(原理+架构+实战)-mikechen

请求进入 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 动静分离实战

Nginx动静分离技术详解(原理+架构+实战)-mikechen

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% 以上。

以上

评论交流
    说说你的看法
❯