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

关注mikechen十余年BAT架构经验倾囊相授!

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

文章来源:mikechen.cc

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

Nginx动静分离

动静分离(Dynamic & Static Separation),是指将 动态请求(如PHP、Java、Python….等后端处理)和 静态资源(如HTML、CSS、JS、图片、视频等)分开处理。

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

通过这种方式,可以极大的提高性能,静态资源由Nginx直接返回,减少后端服务器压力。

还可以提升并发能力,Nginx处理静态请求效率远高于后端应用服务器。

Nginx动静分离架构

整体架构,如下图所示:

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

+---------------------+  |       Client        |  +----------+----------+             |             |(HTTP请求)             v  +---------------------+  |       Nginx        |  |(反向代理+动静分离)|  +----------+----------+             |  +----------+----------+  |静态请求            |动态请求  |(HTML/CSS/JS/图片)  |(API/PHP/Java)  v                     v  +------------------+  +------------------+  |静态资源服务器     |  |后端应用服务器    |  |(本地/CDN)        |  |(Tomcat/Node等)  |  +------------------+  +------------------+

工作流程,如下:

第一,客户端发起请求。

列如:访问 example.com/index.html 或 example.com/api/data)。

其次,分发请求。

Nginx 根据请求类型分发:静态请求(如 .html, .jpg)、动态请求(如 .php, .java)。

静态请求

静态请求(如 .html, .jpg),直接从本地文件系统读取。

配置如下:

server {      listen 80;      server_name example.com;      # 静态资源路径匹配      location ~* .(html|css|js|jpg|png|gif|ico|mp4)$ {          root /data/static;  # 静态资源存放目录          expires 30d;        # 缓存30天          access_log off;     # 可选:关闭日志减少IO      }  }

动态请求

动态请求(如 .php, .java)转发给后端服务器。

配置如下;

location /api/{      proxy_pass http://backend_server;  # 转发到后端服务器      proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;  }

/api/ 开头的请求会被转发到后端(如Tomcat…等等)。

proxy_set_header :确保后端获取真实客户端IP。

整体配置,如下:

server {    listen 80;    server_name your_domain.com;    root /data/www/html;# 默认网站根目录 (可以不包含静态资源)    location /{        try_files $uri $uri//index.php?$query_string;# 优先查找静态文件,找不到则转发给 index.php    }    # 处理静态资源    location ~* .(html|htm|gif|jpg|jpeg|png|bmp|swf|css|js|woff|woff2|ttf|svg|ico)$ {        root /data/www/static;# 静态资源根目录        expires 30d;          # 设置缓存过期时间为 30 天        access_log off;       # 关闭静态资源的访问日志        log_not_found off;    # 关闭找不到静态资源的错误日志    }    # 处理动态 PHP 请求    location ~ .php$ {        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;# PHP-FPM 的 socket 地址        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        include fastcgi_params;    }    # 可以根据需要添加其他动态语言的处理配置 (Python, Java 等)    # location ~ .py$ {    #     uwsgi_pass 127.0.0.1:9090;    #     include uwsgi_params;    # }}

除此之外,结合 Nginx缓存 + CDN + 负载均衡,可大幅提升网站性能!

以上

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

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

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容