前情提要:本篇博客将介绍Tomcat,以及Tomcat的部署和与Nginx的整合,利用Tomcat实现负载均衡的全流程。
一、Tomcat介绍
Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个Servlet和JSP容器。
起始于SUN 公司的一个Servlet的参考实现项目Java Web Server,开发者是 James Duncan Davidson,在1999年,将项目贡献给了apache软件基金会(ASF),和ASF现有的项目JServ 合并,并开源成为顶级项目。
二、Tomcat的安装部署
推荐从Apache官网下载源码包直接安装启动
1、安装java环境
bash
#安装java环境
[root@RS1 ~]# yum install java-1.8.0-openjdk.x86_64 -y
#查看java版本
[root@RS1 ~]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)
#查看java的环境目录
[root@RS1 ~]# which java
/usr/bin/java
[root@RS1 ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Jul 30 10:41 /usr/bin/java -> /etc/alternatives/java
#java的运行环境
[root@RS1 ~]# cd /etc/alternatives/jre
[root@RS1 jre]# ls
ASSEMBLY_EXCEPTION bin lib LICENSE THIRD_PARTY_README
2、安装tomcat
bash
[root@RS1 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz
[root@RS1 ~]# tar zxf apache-tomcat-9.0.115.tar.gz -C /usr/local
[root@RS1 ~]# cd /usr/local/
[root@RS1 local]# ls
bin etc games include lib lib64 libexec sbin share src tomcat-9.0-doc
[root@RS1 local]# mv apache-tomcat-9.0.115/ tomcat
[root@RS1 local]# cd tomcat/
[root@RS1 tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@RS1 bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@RS1 bin]# netstat -antlupe | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 0 139291 10372/java
3、制作tomcat的启动脚本
bash
[root@RS1 bin]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre
[root@RS1 bin]# vim /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
[root@RS1 bin]# useradd -s /sbin/nologin -M tomcat
[root@RS1 bin]# chown tomcat.tomcat /usr/local/tomcat/ -R
[root@RS1 bin]# systemctl daemon-reload
[root@RS1 bin]# systemctl enable --now tomcat
[root@RS1 bin]# netstat -antlupe | grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1000 139979 10682/java
tcp6 0 0 :::8080 :::* LISTEN 1000 140563 10682/java
三、结合反向代理实现tomcat的部署
3.1 常见部署方式介绍

- standalone模式,Tomcat单独运行,直接接受用户的请求,不推荐。
- 反向代理,单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代 理给Tomcat
- LNMT:Linux + Nginx + MySQL + Tomcat
- LAMT:Linux + Apache(Httpd)+ MySQL + Tomcat
- 前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更 适合
- LNMT:Linux + Nginx + MySQL + Tomcat
- 多级代理
- LNNMT:Linux + Nginx + Nginx + MySQL + Tomcat
3.2 利用nginx反向代理实现
注意:后续实验需要一台nginx服务主机,可见博主上一篇文章nginx的介绍

利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机
利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的 host首部
bash
[root@nginx conf.d]# cd /usr/local/nginx/conf/conf.d/
[root@nginx conf.d]# vim vhosts.conf
server {
listen 80;
server_name app.doubledragon.org;
location ~* \.jsp$ {
proxy_pass http://172.25.254.10:8080;
}
}
[root@RS1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
[root@RS1 ~]# scp test.jsp root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/
[root@nginx conf.d]# nginx -s reload
#在windows中设定app.doubledragon.org的解析
#在浏览器中访问 app.doubledragon.org/test.jsp
然后访问对应的域名下的test.jsp即可成功跳转

四、tomcat负载均衡
nginx主机中编写子配置文件
bash
[root@Nginx conf.d]# vim vhosts.conf
upstream tomcat {
hash $cookie_JSESSIONID;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen 80;
server_name app.doubledragon.org;
location ~* \.jsp$ {
proxy_pass http://tomcat;
}
}
[root@Nginx conf.d]# nginx -s reload
#在windows浏览器中访问 app.doubledragon.org/test.jsp;
#在windows的另外一个浏览器中访问 app.doubledragon.org/test.jsp;
然后不同浏览器访问即可发现实现了负载均衡
