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

动静分离,是将 Web 应用程序中的静态资源(如 HTML、JS、CSS、图片、视频)、与动态请求(如 Java、PHP、Python 生成的数据)分开处理。
静态资源: 内容固定。
不需要服务器经过复杂计算,直接由 Nginx 从磁盘读取并返回,速度极快。
动态请求: 需要经过逻辑计算、数据库查询。
通常由后端的应用服务器(如 Tomcat、Gunicorn)处理,耗时较长。
Nginx动静分类原理
在架构上,Nginx 作为反向代理服务器,通过 location 指令对请求进行“分流”:

静态请求: 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 倍。
