Tomcat结合Nginx实现负载均衡与动静态分离
什么是动静态分离 我们都知道一个网站中包含各种文件,如css文件,或者是媒体文件如jpg,png等;不同的web服务器擅长的领域不同,比如Nginx就是响应静态资源请求的王者,而Tomcat是专门用来处理Java应用的web服务器,虽然Tomcat一样可以解析静态资源请求,但在效率上就没法和Nginx相比了; 因此,动静态分离就是利用Nginx的转发技术,当用户请求了servlet,jsp等文件时,将请求转发给Tomcat服务器,当用户请求的是其他的静态资源时,让Nginx代理服务器直接进行解析和响应,以此提升整体的响应效率。 动静态分离架构图 部署负载均衡与动静态分离 机器环境: Hostname 公网IP 内网IP 作用 lb-6 10.0.0.6 172.16.1.6 Nginx负载均衡 web-7 10.0.0.7 172.16.1.7 Tomcat web-9 10.0.0.9
什么是动静态分离
我们都知道一个网站中包含各种文件,如css文件,或者是媒体文件如jpg,png等;不同的web服务器擅长的领域不同,比如Nginx就是响应静态资源请求的王者,而Tomcat是专门用来处理Java应用的web服务器,虽然Tomcat一样可以解析静态资源请求,但在效率上就没法和Nginx相比了;
因此,动静态分离就是利用Nginx的转发技术,当用户请求了servlet,jsp等文件时,将请求转发给Tomcat服务器,当用户请求的是其他的静态资源时,让Nginx代理服务器直接进行解析和响应,以此提升整体的响应效率。
动静态分离架构图
部署负载均衡与动静态分离
机器环境:
使用Ansible部署Tomcat
执行完剧本后,还需要手动使配置的
JAVA_HOME
等变量生效这是因为ansible远程执行的是non-login shell,不会加载
profile
和bash_profile
下的变量,因此需要手动登录执行source;或者也可以写入~/.bashrc
中,然后source一下~/.bash_profile
使其生效。部署NFS服务端
安装nfs-utils和rpcbind工具包
创建存放java apps的文件夹
修改挂载配置
修改挂载目录的属主属组
下载java app到挂载目录
这里使用的是jpress做实验,下载地址:https://www.jpress.cn/club/post/116
部署NFS客户端(在web服务器上)
在两台机器上安装nfs-utils
在Tomcat的webapps目录下创建jpress文件夹
将nfs目录挂载到jpress目录下
解压jpress.war
Tomcat默认会对webapps目录下的.war或.jar包进行自动解压,但因为我们是通过远程挂载的方式执行的,war包在自创的目录下,tomcat识别不到,因此需要手动解压,使用
jar
命令:然后可以将war包删掉了。
部署Nginx负载均衡
安装好Nginx,修改配置文件
nginx.conf
Nginx转发参数:
到此为止负载均衡的配置就基本完毕了。
实现动静态分离
创建一个新的文件用于测试;
这里用得是一个能够生成随机数的jsp文件作为动态资源,和一张jpg图片作为静态资源,动静态分离主要还是基于nginx的location匹配规则。
有两种匹配方式:
基于文件后缀匹配
一个典型的例子如下:
当用户请求的文件后缀和规则向匹配时,Nginx反向代理服务器会自动在本机的对应目录(通过nfs挂载的目录)中搜索内容并返回;
当然,最好的方法还是再增设一个Nginx静态请求解析服务器,负载均衡服务器只用作请求转发。
基于文件路径匹配
这种方式需要运维或开发者预先设定好用于专门存放静态文件内容的目录;
例子:
生成随机数的jsp文件
浏览器访问测试
访问10.0.0.6/test
请求10.0.0.6/image.jpg
可以正常响应。
Read Next
使用Terraform在Ubuntu中部署KVM虚拟机
使用Terraform部署KVM虚拟机的详细流程
MySQL/Redis相关面试题
数据库运维(MySQL和Redis)的面试题总结
事件源模式和传统数据库方法在数据管理上的优劣分析
对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践
关于Metrics_server在自托管环境下无法使用的问题
修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。