一、动静分离原因
以Tomcat服务器为例,Tomcat可以用来解析jsp页面,处理Servlet,但是Tomcat处理静态资源的能力并不是很强。如果可以将动态资源与静态资源相分离,这样就可以大大提高服务器的性能。Nginx可以帮我们处理静态资源,Tomcat可以用来处理动态资源,这样就可以大大提高效率,优化性能。
二、动静分离实现
首先,我们应了解路径匹配规则
= | =/aaa/1.jpg | 路径严格匹配,路径必须一模一样才会匹配到 |
^~ | ^~/aaa | 只要是指定路径开头的路径都可以匹配 |
~ | ~.png$ | 区分大小写按正则匹配路径 |
~* | ~*.png$ | 不区分大小写按正则匹配路径 |
/ | / | 通用匹配,所有路径都可以匹配到 |
我们可以通过路径规则,来拦截请求,譬如,以/static,为开头的url地址,访问的是静态资源。然后,其他的便是访问动态资源。这种简易的规则,进行动静分离。
【1】在D://static下放置我们的静态资源
【2】在每个服务器中,各放置我们的项目war包
【3】修改Nginx配置文件
upstream ccc{
server localhost:8081 weight=5;
server localhost:8082 weight=3;
server localhost:8083 down;
}server {
listen 80;
server_name www.cccmall.com;
location /{
proxy_pass http://ccc;
}
location ^~/static {
root d://;
index index.html;
}
}
分析:
首先,根据路径匹配的优先级表明(越精确,越优先),所以,当以www.cccmall.com/static/1.html访问的时候,不会先去走“/”中。^~/static表示以/static开头的url地址。
如果有www.cccmall.com/static/1.html访问的时候,Nginx会将d://static/1.html静态资源返回给用户。
如果有www.cccmall.com/order/detail访问的时候,Nginx可能会将localhost:8081/webapps中项目名称/order/detail动态资源返回给用户。
大家注意:
root 用于指向nginx服务器中的本地磁盘地址、
index 表示默认页面
proxy_pass 用于处理请求转发,可以是单个地址,也可以是upstream定义的多个地址