知识要点:
Nginx动静分离简介
正则表达式回顾
Nginx动静分离配置
Nginx动静分离简介
动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
在使用动静分离之前先问大家一组数据。
tomcat的并发访问量是多少?
#tomcat的默认访问量是 150
#官方建议的最高值是1000
#实际使用中的定量在 300 - 1000范围内
那么他对于高并发场景下的压力是不是特别的大? 不论是静态的资源还是动态的资源全部由服务器来处理
那么我们Nginx处理并发的能力如何哪?
#Nginx被我们称之为高性能的代理服务器他的性能有多高那?
#正常的并发处理量在5万+
#优化之后可以达到10万+
两者进行对比显而易见我们的nginx并发处理能力特别的强!既然他这么的强我们能不能用它来处理一些不会经常变化的资源哪?也就是我么的静态资源 比如图片 样式 还有省市区的信息 这些是几乎不会变更的。
既然选择nginx处理 那么我们 如何配置哪?思路如何去做哪?
首先理清楚思路:

动静分离
这样减少了服务器的压力,服务器仅仅处理动态请求即可,静态资源由nginx提供,减少了服务器的压力同时提高了用户体验?
有了想法后我们该怎么样去实现那?如何做到在nginx之中进行动态和静态资源的分离哪?
我们是使用location模块一个个匹配吗?
location /{
proxy_pass http://app;
}
当然上述的方案是行的通的,但是配置的资源比较混乱,并且配置比较复杂!我们可以采用下面的正则匹配进行静态资源的处理!
正则表达式回顾
~ #表示正则表达式的开始
. #表示匹配除了/n之外的所有字符
() #表示表达子表达式的开始和结尾
| #表示在两个或者多个之间进行的选择
\ #表示将下一字符标记为特殊字符.文本 反向引用或者八进制字符
$和^ #匹配搜索字符串的结尾位置
* #表示零次或者多次匹配前面的字符表达式
nginx动静分离实战操作
那么我们使用正则表达式做出来是什么样子哪?
server {
listen 80; #监听端口号80
server_name www.app.com; #设置虚拟主机地址
#charset koi8-r;
#access_log logs/host.access.log main;
location ~.*\.(html|png|img|css|ico)$ { #匹配html|png|img|css|ico中任意一个结尾的文件进入下面的文件中查找
#采用正则表达式
#~表示正则表达式开始
#.*表示匹配有一个或者多个前缀路径
#()表示字表达式
# | 表示或者
# $ 表示表达式结束
root html/; #本地的html目录下 单独只写html他会找html以及子目录 带/表示只找当前目录 不进入子目录查找
index index.html index.htm;
}
location ~.*\.(jsp|svg)$ {
proxy_pass http://app;
}
}
配置完成后记得把你的静态资源放入指定目录下,你的root 指定的目录 如果是层及目录,那么你的配置的目录名称需要和你静态资源的层级目录相同即可!
注意:静态资源在命名时尽量不要重复,如果有重复请求时一定要区分开。
如果动态资源,静态资源匹配同一个格式的时候谁先被读到配置,就会在谁那里调取!