深入浅出 -- 系统架构之负载均衡Nginx动静分离

一、Nginx动静分离

动静分离应该是听的次数较多的性能优化方案,那先思考一个问题:为什么需要做动静分离呢?它带来的好处是什么? 其实这个问题也并不难回答,当你搞懂了网站的本质后,自然就理解了动静分离的重要性。先来以淘宝为例分析看看:

当浏览器输入www.taobao.com访问淘宝首页时,打开开发者调试工具可以很明显的看到,首页加载会出现100+的请求数,而正常项目开发时,静态资源一般会放入到resources/static/目录下:

在项目上线部署时,这些静态资源会一起打成包,那此时思考一个问题:假设淘宝也是这样干的,那么首页加载时的请求最终会去到哪儿被处理? 答案毋庸置疑,首页100+的所有请求都会来到部署WEB服务的机器处理,那则代表着一个客户端请求淘宝首页,就会对后端服务器造成100+的并发请求。毫无疑问,这对于后端服务器的压力是尤为巨大的。

但此时不妨分析看看,首页100+的请求中,是不是至少有60+是属于*.js、*.css、*.html、*.jpg.....这类静态资源的请求呢?答案是Yes

既然有这么多请求属于静态的,这些资源大概率情况下,长时间也不会出现变动,那为何还要让这些请求到后端再处理呢?能不能在此之前就提前处理掉?当然OK,因此经过分析之后能够明确一点:做了动静分离之后,至少能够让后端服务减少一半以上的并发量。 到此时大家应该明白了动静分离能够带来的性能收益究竟有多大。


OK~,搞清楚动静分离的必要性之后,如何实现动静分离呢?其实非常简单,实战看看。

①先在部署Nginx的机器,Nginx目录下创建一个目录static_resources

mkdir static_resources

②将项目中所有的静态资源全部拷贝到该目录下,而后将项目中的静态资源移除重新打包。

③稍微修改一下nginx.conf的配置,增加一条location匹配规则:

bash 复制代码
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){
    root   /soft/nginx/static_resources;
    expires 7d;
}

然后照常启动nginx和移除了静态资源的WEB服务,你会发现原本的样式、js效果、图片等依旧有效,如下:

其中static目录下的nginx_style.css文件已被移除,但效果依旧存在(绿色字体+蓝色大边框):

最后解读一下那条location规则:
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)
~代表匹配时区分大小写
.*代表任意字符都可以出现零次或多次,即资源名不限制
\.代表匹配后缀分隔符.
(html|...|css)代表匹配括号里所有静态资源类型

综上所述,简单一句话概述:该配置表示匹配以.html~.css为后缀的所有资源请求。

最后提一嘴,也可以将静态资源上传到文件服务器中,然后location中配置一个新的upstream指向。

相关推荐
高木木的博客5 小时前
数字架构智能化测试平台(1)--总纲
人工智能·python·nginx·架构
wanghowie5 小时前
11. AI 客服系统架构设计:不是调 API,而是系统工程
人工智能·系统架构
徐子元竟然被占了!!6 小时前
Nginx
运维·nginx
图图玩ai7 小时前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
2603_954708317 小时前
交直流混合微电网架构:拓扑优化与功率交互设计
人工智能·分布式·物联网·架构·系统架构·能源
CXH7288 小时前
nginx——https
运维·nginx·https
roman_日积跬步-终至千里8 小时前
分篇三:分布式系统设计
系统架构
钮钴禄·爱因斯晨9 小时前
聚焦操作系统中的PV操作
数据库·算法·系统架构·c#
Lentou9 小时前
nginx反向代理
运维·nginx
遇见火星10 小时前
linux设置开启启动服务
linux·运维·服务器·nginx