Nginx动静分离原理详解(图文全面总结)

动静分离是大型架构常用手段,也是大厂经常考察核心点,下面我重点详解Nginx动静分离原理@mikechen

动静分离

动静分离,顾名思义,就是将网站或应用中动态内容 (Dynamic Content) 和 静态内容 (Static Content) 分开处理和部署的技术。

Nginx动静分离原理详解(图文全面总结)

常见的静态内容,包含: HTML 文件、CSS 文件、JavaScript 文件、图片 (如 PNG, JPG, GIF)、视频、音频、字体文件等。

动态内容,指的的需要与数据库交互的内容。

比如:页面、用户登录后的个人中心、实时更新的数据接口…等。

动态内容,通常由后端编程语言(如 PHP, Python, Java…等)生成。

为什么要做动静分离?

进行动静分离的主要目的是为了提升网站或应用的性能、可维护性和可扩展性。

Nginx动静分离原理详解(图文全面总结)

比如:静态资源分离,可以直接通过 Nginx 或 CDN 服务器提供。

这些服务器通常在处理静态文件方面进行了高度优化,例如:缓存机制…等,可以更快地响应用户的请求。

并且,前端开发人员可以专注于静态资源的优化、和部署。

后端开发人员可以专注于动态逻辑的开发和维护,职责更加清晰,降低了维护的复杂性。

Nginx动静分离原理

Nginx 实现动静分离的核心在于其强大的 location 模块、和相关的指令。

Nginx 实现动静分离,通过请求路由机制(location匹配),来判断请求属于哪种类型,并进行相应处理。

流程如下:

Nginx动静分离原理详解(图文全面总结)

客户端请求 --> 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

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧