Nginx动静分离详解(架构+原理+案例)

Nginx是大型架构必备技能,下面我重点详解Nginx动静分离@mikechen

Nginx动静分离

在高并发网站与分布式应用中,“动静分离”已成为常见且必要的架构实践。

动静分离指将静态内容(如 HTML、CSS、JavaScript、图片、视频等)与动态内容(如 API、模板渲染、业务逻辑等)。

分别由不同服务、或不同部署单元提供。

典型架构包括:

Nginx动静分离详解(架构+原理+案例)

客户端 → Nginx 反向代理(入口);

Nginx 将静态资源直接响应或代理至 CDN/对象存储;

动态请求由 Nginx 转发至后端应用服务器(如 Tomcat、Node、PHP-FPM 等)或微服务;

可配置缓存层(Nginx 缓存或 CDN)与负载均衡策略,结合健康检查与熔断。

 

Nginx动静分离原理

请求匹配与路由,Nginx 基于 location、try_files、rewrite 等指令对 URL 做模式匹配,决定请求处理路径。

静态资源通常通过正则或后缀匹配(如 .(css|js|png|jpg)$),直接定位文件系统、或上游静态服务。

Nginx动静分离详解(架构+原理+案例)

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)$)区分请求类型。

静态匹配优先级高,直接返回,否则转发。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧