Nginx+Tomcat实现动静分离和负载均衡
一、什么是动静分离?
Nginx动静分离简单来说就是把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是将动态请求和静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹的把静态文件放在独立的服务器上,独立出来用域名访问,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起部署,通过Nginx来分开。
二、为什么要动静分离?
Tomcat是一个比较全面的web容器,对静态网页的处理,应该是比较费资源的,特别是每次都要从磁盘读取静态页面,然后返回。这中间会消耗Tomcat的资源,可能会使那些动态页面解析性能受到影响。将静态资源和动态资源隔离开、能够有效的减轻Tomcat服务器的压力,提升网站整体性能。
三、动静分离的实现
查看系统、Nginx、Tomcat的版本号
cat /etc/redhat-release
rpm -qa |grep nginx
/usr/local/tomcat8-1/bin/version.sh
开始配置Nginx,这里Nginx我是用yum安装的,安装可以见另一篇博客https://www.cnblogs.com/opsprobe/p/10773582.html
通过在server段代码配置不同的location实现动静分离
vim /etc/nginx/conf.d/default.conf
写入以下配置
location ~.*\.(html|htm|css|js|gif|jpg|jpeg|bmp|png|ico|txt|eot|svg|ttf|woff|woff2)$ {
root /usr/local/tomcat8-/webapps/;
expires 30d;
} location ~.*$ {
proxy_pass http://tomcat;
}
配置截图如下:
如果想把新的配置单独写出来也是可以的,比如,新建一个文件 vim /etc/nginx/conf.d/tomcat,将配置写入,在 /etc/nginx/conf.d/default.conf 用include引入,include /etc/nginx/conf.d/tomcat;
以截图中的行数对配置做简单的说明:
第8行,匹配项目中用到的所有静态文件后缀,这些静态文件Nginx直接处理,波浪线~表示匹配。
第9行,root,静态文件Nginx直接从本地磁盘读,然后响应给客户端。
第10行,index index.html index.htm; 代表默认主页。
第11行,expires,定义用户浏览器缓存时间30天,静态页面不经常更新的话可以节省带宽缓解服务器压力,第一次访问下载新文件状态为200,以后直接访问本地缓存状态为304,直到受访问文件发生变化或者时间到期。
第14行,匹配其他请求,用来转发动态请求到后端应用服务器Tomcat。
第15行,proxy_pass,代表后端服务器组名,此组名必须为后端服务器站点组名,后面upstream{}模块处会有配置。
server{}; server模块是接收外部请求的部分,配置文件里可以写多个server{}块,每个server{}块代表一个Web站点。
server_name; 代表外网访问域名。
location / {}; 代表一个过滤器,用于制定不同请求的不同操作。
upstream{} 模块
负载均衡功能是将接收到的请求分配到后端的多台服务器上,Nginx里需要 upstream{} 模块来配合使用
打开另一个配置文件,vim /etc/nginx/nginx.conf(注意:不是 /etc/nginx/conf.d/default.conf 配置文件)
先修改nginx运行默认的用户
第一行 user nginx; 改为 user root;
再写入以下配置:
upstream tomcat {
ip_hash;
server 127.0.0.1: weight=;
server 127.0.0.1: weight=;
}
配置截图如下:
第32行,upstream xxx{}; upstream模块是命名一个后端服务器组,组名自定义,我这里为“tomcat”,内部可以写多台服务器ip和port,还可以设置跳转规则及权重等等。
第33行,ip_hash,代表使用ip地址方式分配跳转后端服务器,同一ip请求每次都会访问同一台后端服务器,这样每个访客固定访问一个后端服务器,可以解决session的问题,一般用于登录会话。
第34、35行,server,代表后端Tomcat服务器地址和端口,这里Nginx的Tomcat在一台机器上,所以地址为127.0.0.1;weight,指定轮询权重,权重越高,处理的请求就越多,weight和访问比率成正比,用于后端服务器性能不均的情况。
注意:server_name 和 upstream{} 的组名可以不一致,server_name 是外网访问接收请求的域名,upstream{} 的组名是跳转后端服务器时站点访问的域名。
配置完毕后,重启Nginx,让其生效
systemctl restart nginx
部署项目进行测试动静是否分离
将打成war包的项目上传到tomcat的webapps目录下
启动Tomcat,在浏览器通过Nginx访问项目,Nginx的默认端口为80,Tomcat的默认端口为8080
Ctrl+F5刷新页面,查看Nginx和Tomcat的日志
查看Nginx的日志:
tail -n 0 -f /var/log/nginx/access.log
查看Tomcat的日志:
tail -n 0 -f /usr/local/tomcat8-1/logs/localhost_access_log.2019-12-01.txt
可以看到静态请求和动态请求成功分离了
四、负载均衡
确保项目可以正常访问后,复制tomcat8-1,重命名为tomcat8-2,注意:是将部署在tomcat8-1下的项目一起复制的
cp -a /usr/local/tomcat8-1/ /usr/local/tomcat8-2
# 更改tomcat8-2的两处端口,避免与tomcat8-1冲突
vim /usr/local/tomcat8-2/conf/server.xml
第一处:
第二处:
启动tomcat8-2
/usr/local/tomcat8-2/bin/startup.sh
注意:这里为了验证负载均衡效果,需要注释掉 /etc/nginx/nginx.conf 配置文件里的 ip_hash;一行
保存退出,重启Nginx
在浏览器访问项目
Ctrl+F5刷新页面,查看两个Tomcat的日志
用tail命令查看Tomcat的日志,可以看到两个Tomcat都会响应请求
Nginx+Tomcat的负载功能就配置完成了,这只是简单设置了一下,生产环境中还有很多详细的调整,比如,反向代理,防盗链,压缩,缓存策略等等,后续再逐渐增加。
本文参考自:
(1)https://www.cnblogs.com/taiyonghai/p/6728707.html
(2)https://www.cnblogs.com/taiyonghai/p/5610112.html
(3)https://www.cnblogs.com/jiangyang/p/8485046.html
Nginx+Tomcat实现动静分离和负载均衡的更多相关文章
- Nginx+Tomcat 实现动态分离,负载均衡
什么是动静分离 为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时 ...
- Ngigx+Tomcat配置动静分离,负载均衡
由于公司使用过Ngnix,对于刚接触Nginx来说,感觉有些好奇,于是研究了下. 本人在windows下使用的版本是nginx-1.8.1: 1. 启动Ngnix 双击nginx-1.8.1文件夹中n ...
- Nginx 动静分离与负载均衡的实现
一.前提 企业中,随着用户的增长,数据量也几乎成几何增长,数据越来越大,随之也就出现了各种应用的瓶颈问题. 问题出现了,我们就得想办法解决,一般网站环境,均会使用LAMP或者LNMP,而我们对于网站环 ...
- 使用nginx实现动静分离的负载均衡集群
一.概述: LB负载均衡集群分两类: LVS (四层)和 nginx或haproxy (七层) 客户端通过访问分发器的VIP来访问网站 |现在应用更复杂,比如现在网站页面有: .php .html . ...
- Nginx+Tomcat在Windows下做负载均衡
一. 为什么需要对Tomcat服务器做负载均衡 Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果有超过500的并发数便会出现Tomcat不能响应新的请求的情况,严重影响网站的 ...
- HAProxy实现动静分离和负载均衡
由于电脑配置渣,带不动多台虚拟机,所以采用httpd虚拟主机的方式来实现 1 2 3 CentOS 6.7 httpd: 2.2.15 HAProxy: 1.5.4 主机规划 1 2 3 4 5 - ...
- LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...
- Nginx + Tomcat 动静分离实现负载均衡(转)
0.前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. 1.一份Nginx.conf配置文件 # 定义Nginx运行的用户 和 用户组 如果对 ...
- Nginx + Tomcat 动静分离实现负载均衡
0.前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. 1.一份Nginx.conf配置文件 # 定义Nginx运行的用户 和 用户组 如果对 ...
随机推荐
- 【转】spring的AOP原理,使用场景是什么?
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- icon发展史速览
icon 发展史 img 多张图片占用多个请求,想办法减少请求,合并图片,image sprite background-position /* 使用background-position来定位图标 ...
- windwos文件句柄数限制
1.修改注册表,位置如下: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows 2.设置 1.GDIProc ...
- 【灵魂拷问】你为什么要来学习Node.js呢?
[灵魂拷问]你为什么要来学习Node.js呢? 学习node.js适合的人群: 需要必备一些HTML,CSS,JavaScript及编程有一定程度了解的读者阅读,一些简单的命令行操作,具备服务端开发经 ...
- 熟悉使用ssm框架完成项目
羡慕那些一些博客就能写好多的人,总是能写的长篇大论的,而我就是简短的而且还伴随着语句不通顺等等,只写一点点,归根结底还是自己懒得写! 1.首先了解框架内容,拿到源码,先看配置文件 2.然后修改数据库建 ...
- RabbitMQ心跳检测与掉线重连
1.RabbitMQListener,自定义消息监听器 using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using ...
- 【springboot】【jasypt】加密密码
springboot的版本是 Spring Boot :: (v2.1.5.RELEASE) 依赖 <dependency> <groupId>com.github.ulise ...
- 【插件】【idea】JRebel mybatisPlus extension是JRebel热部署插件的扩展支持mybatis的xml文件热部署
和JRebel一起使用,修改mybatis的mapper.xml文件不用重启项目 File->Settings->Plugs
- ab小工具的Failed requests多的问题
ab小工具的Failed requests多的问题 这个是PHP返回的length不一致造成的 是ab的bug 所以不用理会.. 测试并发写100就行了 一般100没错误
- C++分治策略实现二分搜索
问题描述: 给定已排好序的n个元素组成的数组,现要利用二分搜索算法判断特定元素x是否在该有序数组中. 细节须知: (1)由于可能需要对分治策略实现二分搜索的算法效率进行评估,故使用大量的随机数对算法进 ...