动静分离是大型架构的必备技能,下面我重点详解动静分离@mikechen
动静分离
动静分离:指的是动态请求、和静态请求的分离处理。
如下图所示:

比如:将网站的静态资源(如 HTML、CSS、JavaScript、图片…等)。
和动态资源(如 PHP、JSP、Python 脚本…等)分开处理。
由不同的服务器或服务进行响应,从而提高网站的整体性能和可伸缩性。
Nginx动静分离原理
Nginx动静分离原理,主要依赖 Nginx 的 location 匹配机制。
静态资源路径(如 /static/、/images/)直接映射到本地目录。
其他请求则通过 proxy_pass 转发给后端动态服务器。

如下所示:
server {
listen 80;
server_name example.com;
# 静态资源处理
location ~* \.(jpg|jpeg|gif|png|css|js|ico)$ {
# 设置静态文件根目录
root /var/www/static;
# 开启缓存,有效期为30天
expires 30d;
}
# 动态资源处理
location / {
# 将所有非静态资源的请求代理到后端服务器
proxy_pass http://localhost: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;
}
}
Nginx 会根据 URL 的路径或文件扩展名,匹配相应的 location 块。
如果 URL 匹配到静态资源的 location,Nginx 会直接在本地文件系统中查找并返回文件给用户。
如果 URL 匹配到动态资源的 location,Nginx 会将请求 反向代理 到后端应用服务器(如 PHP-FPM 或 Tomcat)。
这种方式通常用于大型网站,将静态资源部署在专门的静态资源服务器上,与处理动态内容的服务器完全分开。
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。