【Tomcat】tomcat的多实例和动静分离

多实例:

在一台服务器上有多台Tomcat;就算是多实例

安装telnet服务,可以用来测试端口通信是否正常

复制代码
yum -y install telnet

telnet 192.168.220.112 80

tomcat的日志文件

复制代码
cd /usr/local/tomcat/logs

vim catalina.out

Tomcat多实例部署:

1.安装好 jdk
复制代码
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version
2.安装 tomcat
复制代码
cd /opt
tar -xf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
3.配置 tomcat 环境变量
复制代码
vim /etc/profile.d/tomcat.sh

#写入下面内容
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2


#刷新配置文件
source /etc/profile.d/tomcat.sh
4.修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
复制代码
vim /usr/local/tomcat/tomcat2/conf/server.xml

#22行,修改Server prot,默认为8005 -> 修改为8006
<Server port="8006" shutdown="SHUTDOWN">
#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8081" protocol="HTTP/1.1"
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。

第二个连接器默认监听8009端口,负责和其他的HTTP服务器建立连接。

在把Tomcat与其他HTTP服务器集成时,需要用到这个连接器。

第三个连接器

port="8010":指定AJP连接器监听的端口号。在这个示例中,AJP连接器监听在8010端口上。

protocol="AJP/1.3":指定连接器所使用的协议。这里设置为AJP/1.3,表示使用AJP协议的版本1.3。

redirectPort="8443":指定重定向端口。当AJP连接器接收到HTTP请求时,如果请求是通过HTTPS(加密)访问的,

则会将请求重定向到8443端口。

AJP连接器用于将静态资源和动态请求从前端Web服务器(如Apache HTTP Server)转发到Tomcat服务器。

这样可以将Tomcat服务器隐藏在防火墙之后,提高安全性,同时提供更高的性能,特别是在处理动态请求时。

常见的AJP连接器配置是为了将Tomcat与Apache HTTP Server或Nginx等前端服务器集成,以实现负载均衡、反向代理等功能


5.修改各 tomcat 实例中的 startup.shshutdown.sh 文件,添加 tomcat 环境变量;分别把启动文件指向tomcat1和tomcat2
复制代码
vim /usr/local/tomcat/tomcat1/bin/startup.sh 

##--G--在页尾添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
##--G--在页尾添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat2/bin/startup.sh 
##--G--在页尾添加以下内容
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
##--G--在页尾添加以下内容
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
6.启动各 tomcat 中的 /bin/startup.sh
复制代码
/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 

/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 
7.浏览器访问测试
复制代码
http://192.168.220.112:8080
http://192.168.220.112:8081

nginx+tomcat实现动静分离

动静:动态页面和静态页面

分离:分别可以对静态页面和动态页面发起不同的请求,会有不同的响应结果

nginx通过反向代理实现负载均衡------tomcat是后端服务器------web静态由nginx实现------静态请求会分配给nginx------动态页面则经有nginx转发分配给后端的tomcat

tomcat的并发能力比较弱只有nginx的1/6,所以需要由负载均衡对请求进行合理的分配

Nginx+Tomcat负载均衡的组合的优点

Nginx 静态处理优势:Nginx 处理静态页面的效率远高于Tomcat的处理能力,Nginx处理静态资源的能力是Tomcat 处理的6倍

动静分离原理:服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx 提供服务,动态资源由Nginx转发至后端。

Nginx+Tomcat负载均衡

【安装 Nginx 服务】

Nginx服务装在另一台linux上,不要和tomcat装在同一台机子上

复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

2、创建运行用户
useradd -M -s /sbin/nologin nginx

3、编译安装
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/

cd nginx-1.22.0/
./configure --with-stream
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make -j 4 && make install

4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target


chmod 777 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
------
复制代码
cd /usr/local/nginx/conf/
#先备份nginx.conf文件
cp nginx.conf nginx.conf.20230811.bak

vim nginx.conf
在--28行-- #tcp_nopush下插入
upstream ky30 {
    server 192.168.220.112:8080 weight=1;
    server 192.168.220.112:8081 weight=1;
    server 192.168.220.114:8080 weight=2;
}

然后到--47行--#access_log下插入
location ~ .*\.jsp$ {
    proxy_pass http://ky30;
    proxy_set_header HOST $host;
    #将真实的IP地址传给后端服务器
    proxy_set_header X-Real-IP $remote_addr;
    #记录代理服务器地址
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ .*\.(gif|jpg|png)$ {
    root html;
    index index.html index.htm;
}
检查配置文件并重启
复制代码
nginx -t

systemctl restart nginx.service
1号机
创建网页文件
复制代码
Tomcat1的配置
mkdir /usr/local/tomcat1/webapps/test
vim /usr/local/tomcat1/webapps/test/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>


Tomcat2的配置
mkdir /usr/local/tomcat2/webapps/test
vim /usr/local/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2  page</title>  
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
修改server.xml配置文件
复制代码
cd /usr/local/tomcat1/conf/
改之前先备份一下
cp server.xml server.xml.20230811.bak

vim server.xml

#在原有的<host>标签下新添下面的内容
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat1/webapps/test" path="" reloadable="true" />
</Host>



cd /usr/local/tomcat2/conf/
改之前先备份一下
cp server.xml server.xml.20230811.bak

vim server.xml

#在原有的<host>标签下新添下面的内容
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat2/webapps/test" path="" reloadable="true" />
</Host>
重启tomcat服务
复制代码
/usr/local/tomcat1/bin/shutdown.sh
/usr/local/tomcat1/bin/startup.sh

/usr/local/tomcat2/bin/shutdown.sh
/usr/local/tomcat2/bin/startup.sh
打开另一台虚拟机;安装好tomcat服务
复制代码
访问一下1号机的tomcat,看能否连得上------显示网页代码
curl 192.168.220.112:8080
curl 192.168.220.112:8081

或者打开浏览器访问
192.168.220.112:8080
192.168.220.112:8081

mkdir /usr/local/tomcat/webapps/test
vim index.jsp

mkdir /usr/local/tomcat/webapps/test

vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3  page</title>  
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>
修改配置文件
复制代码
cd /usr/local/tomcat/conf/
cp server.xml server.xml.20230811.bak
vim server.xml

在原有的<host>标签下添加
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
重启tomcat服务
复制代码
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
回到装有Nginx服务的机子
复制代码
cd /usr/local/nginx/html/
vim index.html

<html>
<head>
<title>Nginx test page</title>
</head>
<body>
<h1>this is Nginx static test !</h2>
<img src="1.jpg"/>
</body>
</html>


systemctl stop firewalld
setenforce 0


将图片文件添加到/usr/local/nginx/html/目录下,注意文件名要一致

打开浏览器访问Nginx服务所在机子的IP地址
192.168.220.102

加上/index.jsp访问,刷新页面,页面内容也随之刷新
192.168.220.102/index.jsp
相关推荐
范文杰40 分钟前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪1 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪1 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy2 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom2 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom2 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom2 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom2 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom3 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试
LaoZhangAI4 小时前
2025最全GPT-4o图像生成API指南:官方接口配置+15个实用提示词【保姆级教程】
前端