当前位置: 首页 > news >正文

快速安全部署 Tomcat

主机环境

IP域名用途
172.25.254.10tomcat1.orgTomcat
172.25.254.20tomcat2.orgTomcat
172.25.254.30nginx-server.orgNginx 负载均衡

Tomcat 安装

172.25.254.10

# 安装JAVA
[root@tomcat1 ~]# yum install java-1.8.0-openjdk.x86_64 -y
# 下载Tomcat,推荐在Windows主机下载后,上传虚拟机
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.93/src/apache-tomcat-9.0.93.tar.gz
tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/
# 创建软连接(简化命令)
ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat
# 添加用户,修改权限
useradd -s /sbin/nologin -M tomcat
chown -R tomcat.tomcat /usr/local/tomcat/
# 为Tomcat添加JAVA
vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk/
# 设置Tomcat命令启停脚本
vim /usr/bin/tomcat
#!/bin/bash
case $1 instart)/usr/local/tomcat/bin/startup.sh;;stop)/usr/local/tomcat/bin/shutdown.sh
esac
chmod +x /usr/bin/tomcat
# 设置开机自启脚本
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/bin/tomcat start
ExecStop=/usr/bin/tomcat stop
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
# 重载配置文件,并启动
systemctl daemon-reload
# 启动不成功,可能是/usr/local/apache-tomcat-9.0.93/bin/下的.sh没有x权限
# 官方下载的包内,.sh文件没有x权限
systemctl enable --now tomcat
# 复制文件给172.25.254.20
scp -rp /usr/local/apache-tomcat-9.0.93 root@172.25.254.20:/usr/local/
scp -p /usr/bin/tomcat  root@172.25.254.20:/usr/bin/
scp -p /lib/systemd/system/tomcat.service  root@172.25.254.20:/lib/systemd/system/

172.25.254.20

[root@tomcat2 ~]# yum install java-1.8.0-openjdk.x86_64 -y
ln -s /usr/local/apache-tomcat-9.0.93 /usr/local/tomcat
useradd -s /sbin/nologin -M tomcat
chown -R tomcat.tomcat /usr/local/tomcat/
systemctl daemon-reload
systemctl enable --now tomcat

效果演示

在这里插入图片描述在这里插入图片描述

Tomcat 反向代理

Tomcat 服务器

cp test.jsp /usr/local/tomcat/webapps/ROOT/

172.25.254.30

# 安装nginx
dnf install nginx -y
vim /etc/hosts		# Windows主机 hosts 文件 也需要添加
172.25.254.10   tomcat1.org
172.25.254.20   tomcat2.org
172.25.254.30   nginx-server.org
# 编辑子配置文件
vim /etc/nginx/conf.d/vhost.conf
server {listen *:80;server_name nginx-server.org;root /data/web/html;index index.html;location ~ \.jsp$ {proxy_pass http://172.25.254.10:8080;}
}
# 启动nginx
systemctl enable --now nginx

效果演示

在这里插入图片描述

Tomcat 负载均衡

172.25.254.30

vim /etc/nginx/conf.d/vhost.conf
upstream tomcat {# ip_bash;# hash $cookie_JSESSIONID;server 172.25.254.10:8080;server 172.25.254.20:8080;
}server {listen *:80;server_name nginx-server.org;root /data/web/html;index index.html;location ~ \.jsp$ {proxy_pass http://tomcat;}
}# 检测语法是否出错
nginx -t
# 重载nginx配置文件
nginx -s reload

效果演示

在这里插入图片描述
在这里插入图片描述

目前配置中存在的问题

  • 交替访问的IP不一致,会话不一致,导致提交的数据消失
    • nginx配置中使用ip_bash算法进行解决
  • 刷新导致会话断开,提交的数据消失
    • nginx配置中使用hash $cookie_JSESSIONID算法进行上述问题

Memcached

Tomcat 服务器

# 安装 Memcached
yum install memcached -y
# 编辑配置文件
vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"# 启动Memcached
systemctl enable --now memcached
# 查看端口是否打开
netstat -antlupe | grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      983        61722      31178/memcached
tcp6       0      0 ::1:11211               :::*                    LISTEN      983        61723      31178/memcached

session 共享服务器

有时候,当客户访问Tomcat时,恰巧Tomcat宕机,导致客户提交的数据丢失,给用户带来不好的体验

需要部署Tomcat会话共享,避免这种情况发生

Tomcat 服务器

# 上传所有.jar文件到Tomcat服务器的/usr/local/tomcat/lib/中
# 编辑会话共享配置文件
vim /usr/local/tomcat/conf/context.xml
# 172.25.254.10...<Manager pathname="" />--><Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"failoverNodes="n1"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
</Context>
# 172.25.254.20...<Manager pathname="" />--><Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"failoverNodes="n2"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
</Context>systemctl restart tomcat

Nginx 服务器

vim /usr/local/nginx/conf.d/vhosts.conf
upstream tomcat {hash $cookie_JSESSIONID;server 172.25.254.10:8080;server 172.25.254.20:8080;
}server {listen *:80;server_name nginx-server.org;root /data/web/html;index index.html;location ~ \.jsp$ {proxy_pass http://tomcat;}
}nginx -s reload

效果演示

在这里插入图片描述

此时暂停 172.25.254.10 的 Tomcat 服务

systemctl stop tomcat

然后输入ccc 333 点击提交

在这里插入图片描述

可以看见,即使172.25.254.10的Tomcat服务宕掉后,会话依然可以正常进行,并没有导致提交的数据丢失
在这里插入图片描述

相关文章:

  • 电路笔记(PCB): kicad freerouting自动布线
  • UVM仿真的启动(二)—— uvm_phase::m_run_phase()
  • 微信小程序利用canva进行大图片压缩
  • 【人工智能】AI算法系统设计与算法建模的详细阐述
  • leetcode 1957 删除字符使字符串变好
  • 【ubuntu20.4 常用经验分享】
  • [RIS]GRES: Generalized Referring Expression Segmentation
  • JAVA中如何使用反射获取数组元素类型
  • [论文笔记] megatron 大模型超参搜索pipeline
  • 【练习】哈希表的使用
  • Python切片技巧,带你轻松提取数组子集!
  • NeRF笔记
  • SpringBoot 基于iText 根据PDF模板动态生成文件
  • OSError: [E050] Can‘t find model ‘en_core_web_sm‘.
  • Python爬虫(一文通)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 08.Android之View事件问题
  • centos安装java运行环境jdk+tomcat
  • download使用浅析
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • storm drpc实例
  • Vue2 SSR 的优化之旅
  • 从零开始在ubuntu上搭建node开发环境
  • 服务器之间,相同帐号,实现免密钥登录
  • 蓝海存储开关机注意事项总结
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端工程化(Gulp、Webpack)-webpack
  • 少走弯路,给Java 1~5 年程序员的建议
  • 世界上最简单的无等待算法(getAndIncrement)
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用简单代码看卷积组块发展
  • 在electron中实现跨域请求,无需更改服务器端设置
  • const的用法,特别是用在函数前面与后面的区别
  • Java数据解析之JSON
  • Java性能优化之JVM GC(垃圾回收机制)
  • postgresql行列转换函数
  • 如何在招聘中考核.NET架构师
  • ​决定德拉瓦州地区版图的关键历史事件
  • #知识分享#笔记#学习方法
  • (LLM) 很笨
  • (TOJ2804)Even? Odd?
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (二)hibernate配置管理
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (力扣)1314.矩阵区域和
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十三)Maven插件解析运行机制
  • (一一四)第九章编程练习
  • (转)fock函数详解
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .htaccess配置重写url引擎
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件