Nginx+Tomcat实现动静分离

前言

1. 什么是网站动静分离架构模式?
  • 网站中的动静分离其实就是将动态资源和静态资源分离处理。
  • 传统网站架构模式:jsp、html、img、css、js全部存放在一个服务器上,把静态资源和动态资源共同放到一台服务器上。
  • 大型互联网公司中前端与后端开发是分离,静态资源和动态资源不会部署到同一台服务器上,静态资源部署在一个服务器上(html、css、img、js …),动态资源部署在一个服务器上(后端代码)
2. 动态资源和静态资源的区别?
  • 静态资源:用户多次访问后,html源代码不会发生改变,例如html、jpg 、css、js 等不需要后台处理的资源。
  • 动态资源:用户多次访问后,html源代码可能会发生改变,例如我们访问的JSP页面 (本质是一个Servlet)或*.do请求等。
  • 区别:判断标准是,刷新多次,html源代码是否发生改变
  • 误区:并不是页面是动态的,就一定是动态页面,一般动态页面为了提高被搜索引擎搜到的机率,会使用伪静态;也就是说使用动态页面静态化技术将页面静态化,静态化技术有Freemarker、Beetl、Velociity、Thymeleaf 等。
3. 为什么要使用动静分离?
  • 其实就是减轻服务器的压力、提高服务器的响应速度和效率、保证高并发。就像数据库的读写分离一样,也是保证高并发。
  • 静态服务器我们同时也可以使用CDN做内容分发,访问不同的资源转发到不同的服务器。
  • 静态服务器我们一般使用Nginx,Nginx实现静态服务器要比Tomcat 快得多。
4. 动静分离与前后端分离的区别?
  • 动静分离:指的是动态资源和静态资源分离,分别部署在不同的服务器上。
  • 前后端分离:网站架构模式中,微服务开发基于SOA面向服务开发,后台和前端都采用调用接口方式。
5. 图示

在这里插入图片描述
图片来源:蚂蚁课堂


搭建动静分离(Nginx+Tomcat实现)

Nginx的nginx.conf文件配置中配置如下:
由于不是详细教学篇,不熟悉nginx的想要详细了解每个配置的意义会花些时间,这里只是做个记录供自己以后查看。

#静态资源服务配置(一定要配置在动态资源之前,因为动态资源location采用/匹配的,否则请求就被统一当做动态资源处理)
	server {
		listen       80;   # 表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。
		server_name  wangxu;  
		
		#静态资源
		location .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
		root html;
		index index.html index.htm;
		}
		
	}
	
	
	#配置上游服务器 集群,默认轮询机制
	upstream backServer{
		server 127.0.0.1:81;
		server 127.0.0.1:82;
	}
	#动态资源服务配置
    server {
        listen       80;   # 表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。
        server_name  localhost;   # 表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {    # 表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
            #root   html;   # 里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。
			#指定上游负载均衡服务器
			proxy_pass http://backServer/;
            #index  index.html index.htm;   # 当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

浏览器访问wangxu时会访问Nginx本地html文件夹内的index.html页面
在这里插入图片描述

浏览器访问localhost/api-member时会转发到上游网关服务,由网关转发到对应的服务;

在这里插入图片描述

拓展

      其实我们在实际做动静分离的时候我们一般不这样做。因为大多数网站静态资源比动态资源大得多,往往影响网站加载速度的往往是静态资源,这其实对我们的带宽要求非常高。
      例如我服务器带宽是1Mbps(1Mbps≈128kb/s),发一个请求动态资源10kb、静态资源590kb,这时候我们也要(590+10)/128≈5秒才能完成加载,更别说并发访问的情况了,我们虽然也可以提高带宽,而且带宽是非常贵的(比服务器配置还贵),治标不治本,一般我们采用三方服务商CDN来做静态资源缓存,它会将我们的静态资源缓存到各个节点,并支持就近原则访问
在这里插入图片描述

为什么将静态资源存放到第三方服务器效率非常高呢?
      1.云服务器签订带宽都是将T算;
      2.CDN内容分发,能够将静态资源缓存到全国各地节点能够减少客户端与CDN带宽距离从而提高响应速度;就近原则访问,举个例子,比如说我是四川的用户就访问成都的节点或离四川比较近的节点。
      3.春节人口迁徙,根据就近原则会导致某些节点压力很大,这时也会访问其他节点的。


------------------------------------- 学习不易,需要坚持----------------------------------------
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值