Nginx动静分离架构详解(图文全面总结)

Nginx 动静分离是一种常见性能优化技术,Nginx动静分离架构可以更好的提升性能@mikechen

Nginx动静分离

动静分离是一种优化应用性能、和可伸缩性的架构策略。

Nginx动静分离,核心思想是将 Web 应用中的动态资源、和静态资源分开部署和管理。

并通过 Web 服务器(通常是 Nginx)进行智能的请求分发,如下图所示:

Nginx动静分离架构详解(图文全面总结)-mikechen

在动静分离架构中,Nginx 作为前置的 反向代理服务器 + 静态资源服务器,具有如下职责:

拦截静态资源请求,直接读取本地文件并响应(高性能、无 I/O 等待);

转发动态请求 到后端应用服务器(如 Tomcat、PHP-FPM、Node.js)处理业务逻辑。

通过动静分离,我们可以将不同类型的请求交给最擅长处理它们的服务器,从而提高整体的效率和可维护性。

 

Nginx动静分离架构

整体架构,如下图所示:

Nginx动静分离架构详解(图文全面总结)-mikechen

对于静态资源请求,可以配置 Nginx 直接从本地文件系统(Nginx 服务器所在的磁盘),读取并返回给客户端。

也可以配置 Nginx 将请求,反向代理到专门的静态资源服务器(例如另一台 Nginx 服务器)、或内容分发网络 (CDN)。

对于动态资源请求,Nginx 将请求反向代理到后端的动态应用服务器集群(例如运行 PHP-FPM、Tomcat…等的服务器)。

  1. ┌────────────┐
  2. 客户端
  3. └────┬───────┘
  4. ┌─────▼─────┐
  5. Nginx
  6. └────┬──────┘
  7. ┌───────┼────────┐
  8. ┌───────▼──────┐ ┌──────▼──────┐
  9. 静态资源服务器 动态应用服务
  10. (如OSS/CDN) (如Tomcat)
  11. └──────────────┘ └─────────────┘

Nginx 动静分离核心就三步:

收请求: Nginx 接收用户请求;

分类型: Nginx 根据 URI 判断是静态资源(如图片、CSS、JS)还是动态请求(如 PHP 页面)。

导向处理,静态资源,Nginx 自己处理(读取本地文件)或转发给专门的静态资源服务器/CDN。

动态请求, Nginx 转发给后端的应用服务器(如 Tomcat。。。等等)。

整体配置,如下:

  1. server {
  2. listen 80;
  3. server_name www.example.com;
  4.  
  5. # 静态资源处理
  6. location ~* \.(jpg|jpeg|png|gif|css|js|ico|html|woff|ttf)$ {
  7. root /var/www/static;
  8. expires 7d;
  9. }
  10.  
  11. # 动态请求代理后端
  12. location / {
  13. proxy_pass http://127.0.0.1:8080;
  14. proxy_set_header Host $host;
  15. proxy_set_header X-Real-IP $remote_addr;
  16. }
  17. }

通常,对于大型高并发的 Web 应用,结合使用 CDN 和专门的静态资源服务器是更优的选择。

评论交流
    说说你的看法
欢迎您,新朋友,感谢参与互动!