nginx+tomcat动静分离实现负载均衡
2018-07-20 本文已影响240人
橡皮24
一、 简介
1. 为什么要用nginx+tomcat动静分离
主要是nginx处理静态页面的效率远高于tomcat的处理能力,如果tomcat的请求量为1000次,则nginx的请求量为6000次,tomcat每秒的吞吐量为0.6M,nginx的每秒吞吐量为3.6M,可以说,nginx处理静态资源的能力是tomcat处理能力的6倍,优势可见一斑。
2. 动静分离原理
服务端接收来自客户端的请求中,有一部分是静态资源的请求,例如html,css,js和图片资源等等,有一部分是动态数据的请求。因为tomcat处理静态资源的速度比较慢,所以我们可以考虑把所有静态资源独立开来,交给处理静态资源更快的服务器例如nginx处理,而把动态请求交给tomcat处理。
我们在机器上同时安装了nginx和tomcat(或者分两台机器做),把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在tomcat的webroot目录下面,当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能。
3.系统简介及配置
IP地址 | 主机名 | 运行服务 | 系统版本 | 服务版本 |
---|---|---|---|---|
172.19.150.104 | nginx | Nginx | centos7.3.1611 | nginx/1.6.2 |
172.19.150.105 | tomcat | Tomcat/jdk | centos7.3.1611 | tomcat7/jdk1.7 |
备注:nginx和tomcat等服务之前都已经安装好了。这里不再重复。(默认都是80端口)
二、 配置动静分离
1. 配置nginx
Nginx的主配置文件内有include /etc/nginx/conf.d/*.conf;所以我在/etc/nginx/conf.d/目录下创建local.conf配置文件
[root@nginx conf.d]# vim local.conf
server {
listen 80; ##监听端口
server_name 172.19.150.104;
access_log /opt/nginx_log/local.log main;
location / {
index index.html;
root /var/www/html; ##主目录
}
location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ { ##以括号内结尾的请求,都请求nginx
root /var/www/html; ##主目录
}
location ~ \.(jsp|do)$ { ##以.jsp和.do结尾的,都请求tomcat
proxy_pass http://172.19.150.105; ##tomcat的IP地址
expires 1h; ##缓存一小时
}
}
注意:如果tomcat的端口不为80在IP后边要加端口号。不能指定从目录
三、 验证
1.配置nginx
在nginx主目录里编写index.html(属于静态页面)
[root@nginx ~]# vim /var/www/html/index.html
nginx
2.配置tomcat
在tomcat主目录里编写动态页面test1.jsp
[root@tomcat ~]# vim /data/webapps/test1.jsp
<head>
<body>
<script type="text/javascript">
function display(clock){
var now=new Date(); //创建Date对象
var year=now.getFullYear(); //获取年份
var month=now.getMonth(); //获取月份
var date=now.getDate(); //获取日期
var day=now.getDay(); //获取星期
var hour=now.getHours(); //获取小时
var minu=now.getMinutes(); //获取分钟
var sec=now.getSeconds(); //获取秒钟
month=month+1;
var arr_week=new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
var week=arr_week[day]; //获取中文的星期
var time=year+"年"+month+"月"+date+"日 "+week+" "+hour+":"+minu+":"+sec; //组合系统时间
clock.innerHTML="当前时间:"+time; //显示系统时间
}
window.onload=function(){
window.setInterval("display(clock)", 1000);
}
</script>
<div id="clock" ></div>
</body>
</html>
3.验证是否成功
①直接访问nginx
②直接访问tomcat的jsp内容
③通过nginx访问tomcat的jsp