Nginx动静分离原理详解(图文全面总结)
动静分离在大型架构常用手段,也是大厂经常考察核心点,下面我重点详解Nginx动静分离原理@mikechen
作者:mikechen
文章来源:mikechen.cc
动静分离
动静分离,顾名思义,就是将网站或应用中动态内容 (Dynamic Content) 和 静态内容 (Static Content) 分开处理和部署的技术。
常见的静态内容,包含: HTML 文件、CSS 文件、JavaScript 文件、图片 (如 PNG, JPG, GIF)、视频、音频、字体文件等。
动态内容,指的的需要与数据库交互的内容。
比如:页面、用户登录后的个人中心、实时更新的数据接口…等。
动态内容,通常由后端编程语言(如 PHP, Python, Java…等)生成。
为什么要做动静分离?
进行动静分离的主要目的是为了提升网站或应用的性能、可维护性和可扩展性。
比如:静态资源分离,可以直接通过 Nginx 或 CDN 服务器提供。
这些服务器通常在处理静态文件方面进行了高度优化,例如:缓存机制…等,可以更快地响应用户的请求。
并且,前端开发人员可以专注于静态资源的优化、和部署。
后端开发人员可以专注于动态逻辑的开发和维护,职责更加清晰,降低了维护的复杂性。
Nginx动静分离原理
Nginx 实现动静分离的核心在于其强大的 location 模块、和相关的指令。
Nginx 实现动静分离,通过请求路由机制(location匹配),来判断请求属于哪种类型,并进行相应处理。
流程如下:
客户端请求 --> Nginx |-- 请求动态内容,如 /index.php --> 反向代理到后端(FastCGI、Tomcat、Node.js等) | |-- 请求静态资源,如 /css/style.css --> Nginx 本地直接读取 /static/css/style.css
通过配置不同的 location 块,Nginx 可以根据请求的 URI (统一资源标识符,也就是网址) ,将请求分发到不同的处理方式或后端服务器。
比如:
server { listen 80; server_name www.example.com; # 静态资源处理:如 /static/js/app.js location ^~ /static/ { root /usr/share/nginx/html/; expires 30d; access_log off; } # 后端接口请求转发:如 /api/user 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; } # 默认请求(前端路由支持) location / { root /usr/share/nginx/html/; index index.html; try_files $uri $uri/ /index.html; }}
^~ /static/:将 /static/ 前缀的请求直接映射到本地静态目录;
/api/:转发给 Java 后端(用于 REST 接口请求);
这样,通过将静态资源和动态内容分离处理,从而显著提升网站的性能。
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。