找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2695

积分

0

好友

376

主题
发表于 昨天 23:38 | 查看: 1| 回复: 0

动静分离,是指在 Web 服务中将动态资源与静态资源分开处理与部署的架构思想。

静态资源,如 HTML、CSS、JavaScript、图片、视频等,无需服务器端频繁计算或访问数据库,可直接由文件系统或 CDN 提供。而动态资源,如需后端逻辑、数据库查询、用户会话等,则由应用服务器或后端服务生成。

Nginx动静分离架构示意图

动静分离的主要目的是提高系统性能、降低后端负载、便于缓存和水平扩展,同时改善资源管理与运维效率。

Nginx动静分离原理

动静分离与负载均衡架构图

Nginx 实现动静分离,主要依赖于其强大的 Location 匹配机制,您可以在云栈社区的数据库与中间件板块找到更多相关讨论。

核心原理包括:

  • URL 匹配:通过正则表达式匹配 URL 的后缀(如 .png, .js)或特定的目录路径(如 /static/)。
  • 高效 I/O 模型:Nginx 使用 epoll 模型和 sendfile 系统调用(零拷贝技术)。在处理静态文件时,Nginx 可以直接将磁盘文件的数据传输到网络 socket,而无需将数据拷贝到用户态内存,这使得它处理静态资源的速度比 Tomcat/Python 快几倍甚至几十倍。
  • 缓存机制:Nginx 还可以设置 expires 头,通知浏览器缓存静态文件,进一步减少服务器请求。

Nginx分发请求至Tomcat集群

Nginx动静分离实战

动态请求将被转发给应用服务器,如 Tomcat、Jetty、Express、Django 等处理动态请求。一个典型的Nginx动静分离配置示例如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on; # 开启零拷贝,加速静态文件传输
    keepalive_timeout  65;

    # 定义后端应用服务器集群
    upstream backend_server {
        server 127.0.0.1:8080;
    }

    server {
        listen       80;
        server_name  localhost;

        # ----------------------------------------------------
        # 规则 1:动态请求转发
        # 凡是不匹配下面静态规则的,或者特定路径的,都转发给 Tomcat
        # ----------------------------------------------------
        location / {
            proxy_pass http://backend_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # ----------------------------------------------------
        # 规则 2:静态资源分离 (按后缀匹配)
        # 凡是 .jpg, .png, .css, .js 结尾的请求,直接去本地找
        # ----------------------------------------------------
        location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
            root    /data/www/static; # 静态文件实际存放的绝对路径
            expires 30d; # 设置浏览器缓存过期时间为 30 天
        }

        # ----------------------------------------------------
        # 规则 3:静态资源分离 (按目录匹配 - 可选)
        # 凡是 /static/ 开头的请求
        # ----------------------------------------------------
        # location /static/ {
        #     root /data/www/;
        # }
    }
}

总结

总之,Nginx 动静分离是提升 Web 系统性能与可扩展性的有效实践,其本质是一种负载均衡策略的精细化应用。通过合理的路由规则、缓存策略与 CDN 结合,可显著降低后端负载、提高用户体验并简化运维流程。如果您对更多架构实践和性能优化技巧感兴趣,欢迎关注技术社区的后续分享。




上一篇:开源操作系统ReactOS项目30年,重建Windows NT兼容内核之路
下一篇:Vercel开源add-skill:AI Agent技能统一管理工具,一行命令安装与分发
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-27 04:27 , Processed in 0.248797 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表