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

Nginx动静分离

动静分离,顾名思义,就是将网站的动态内容、和静态内容分开处理、和部署。

如下图所示:

Nginx动静分离原理(图文全面总结)-mikechen

静态内容:指不依赖后端程序处理、不经常变化的文件。

比如:HTML、CSS、JavaScript、图片(jpg、png等)、视频。。。等。

动态内容:需要后端应用程序(如PHP、Java、Python等)处理后生成的内容,如API接口、动态网页…等。

将静态资源的请求分发给专门的服务器或 Nginx 直接处理,可以释放后端应用服务器的资源,使其专注于处理动态逻辑。

 

Nginx动静分离原理

Nginx动静分离原理,如下图所示:

Nginx动静分离原理(图文全面总结)-mikechen

大致流程,如下:

首先,请求分类转发。

Nginx根据请求的URL路径或文件后缀名判断请求类型,静态资源请求直接由Nginx返回,动态资源请求通过反向代理转发到后端服务器。

其次,缓存机制。

Nginx可以缓存静态资源,减少对后端服务器的请求次数,提升响应速度。

然后,浏览器缓存控制。

通过设置Expires、Cache-Control等HTTP头,控制浏览器缓存,减少重复请求。

最后,资源专职处理。

Tomcat专注处理动态请求,Nginx专注处理静态资源,提高资源利用率和性能

http {
    upstream backend_server {
        server 127.0.0.1:8080;  # 后端动态资源服务器地址和端口
    }

    server {
        listen 80;
        server_name example.com;

        # 静态资源处理
        location /static/ {
            alias /usr/local/mystatic/;  # 静态资源路径
            autoindex on;                # 可选,目录浏览
            expires 30d;                 # 设置浏览器缓存30天
        }

        # 静态资源匹配文件扩展名
        location ~* \.(jpg|jpeg|png|gif|css|js|ico|html)$ {
            root /usr/local/mystatic/;
            expires 30d;
        }

        # 动态资源处理,转发给后端服务器
        location / {
            proxy_pass http://backend_server;
            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 /static/ ,用于匹配静态资源请求,直接从本地静态目录返回。

动态请求,通过 proxy_pass 转发给后端应用服务器。

mikechen

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

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

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

评论交流
    说说你的看法