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

Nginx是大型架构核心,下面重点详解Nginx动静分离@mikechen

Nginx动静分离

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

动静分离,是将 Web 应用程序中的静态资源(如 HTML、JS、CSS、图片、视频)、与动态请求(如 Java、PHP、Python 生成的数据)分开处理。

静态资源: 内容固定。

不需要服务器经过复杂计算,直接由 Nginx 从磁盘读取并返回,速度极快。

动态请求: 需要经过逻辑计算、数据库查询。

通常由后端的应用服务器(如 Tomcat、Gunicorn)处理,耗时较长。

 

Nginx动静分类原理

在架构上,Nginx 作为反向代理服务器,通过 location 指令对请求进行“分流”:

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

静态请求: Nginx 根据文件后缀名,直接在本地磁盘或文件服务器(如 NFS)中查找并返回。

动态请求: Nginx 通过 proxy_pass 将请求转发给后端的应用服务器集群。

如下所示:

server {
    # 匹配以这些后缀结尾的请求
    location ~* \.(jpg|jpeg|gif|png|css|js|ico|webp)$ {
        root /usr/share/nginx/html/assets;
        expires 7d;             # 开启强缓存
        access_log off;         # 静态资源通常不记录访问日志,减小磁盘开销
    }

    # 其他所有请求走动态代理
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

location 匹配:使用正则(如 ~ .(jpg|png|css|js)$)区分静态/动态。
proxy_pass:转发动态请求。
gzip/expires:静态资源压缩和缓存。
upstream:后端负载均衡。

通过动静分离,一个典型网站可将响应时间从 200ms 降到 50ms,QPS 提升 2-5 倍。

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