day47-tomcat
1. ✅tomcat与nginx结合
1.1. 🎯接入nginx
- 静态资源(html|js|css|jpg|jpeg|bmp)交给nginx处理,其他的转发给tomcat处理
1.修改yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安装nginx
yum -y install nginx3.修改nginx配置文件
vim /etc/nginx/conf.d/zrlog.zhubl.xyz.conf
server {listen 80;server_name zrlog.zhubl.xyz;error_log /var/log/nginx/zrlog-error.log notice;access_log /var/log/nginx/zrlog-access.log main;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real_Ip $remote_addr;}location ~* \.(html|js|css|jpg|jpeg|bmp)$ {root /app/tools/tomcat/webapps/ROOT/;expires 7d;}
}4.重启nginx
systemctl reload nginx5.修改站点目录权限
find /app/tools/tomcat/webapps -type f |xargs chmod 644
find /app/tools/tomcat/webapps -type d |xargs chmod 755
1.2. 📁数据库连接文件
[root@web03 /app/tools/tomcat]# cat webapps/ROOT/WEB-INF/db.properties
#This is a database configuration file
#Thu Jul 03 09:20:43 CST 2025
driverClass=com.mysql.cj.jdbc.Driver
user=zrlog
password=lidao
jdbcUrl=jdbc\:mysql\://172.16.1.51\:3306/zrlog?characterEncoding\=UTF-8&allowPublicKeyRetrieval\=true&useSSL\=false&serverTimezone\=GMT
2. ✅zrlog集群
2.1. 📝环境准备
角色 | 主机 | ip |
数据库 | db01 | 172.16.1.51 |
存储 | nfs01 | 172.16.1.31 |
web服务 | web03/web04 | 172.16.1.9/172.16.1.10 |
负载 | lb01/lb02 | 172.16.1.5/172.16.1.6 |
高可用 | keepalived | 172.16.1.3 |
2.2. 🔐准备数据库
1.安装数据库
yum -y install mariadb-server2.启动数据库
systemctl enable mariadb-server --now3.初始化数据库
#仅仅刚安装的时候运行.仅首次运行即可.
mysql_secure_installation
用于设置root密码,清理用户和清理临时库.Enter current password for root (enter for none):回车Set root password? [Y/n] Y设置密码New password: 输入密码
Re-enter new password: 再次输入
Password updated successfully!
Reloading privilege tables..... Success!Remove anonymous users? [Y/n] Y 删除数据库中的匿名用户(没有用户名的用户,容易导致安全问题)Disallow root login remotely? [Y/n] Y 是否禁止root远程登录Remove test database and access to it? [Y/n] Y 是否删除test测试用的数据库Reload privilege tables now? [Y/n] Y 是否更新权限信息表3.登录数据库,添加zrlog库,添加zrlog用户
mysql -uroot -p1
create database zrlog;
grant all on zrlog.* to 'zrlog'@'172.16.1.%' identified by 'lidao';
2.3. 💾部署存储
1.修改配置文件
vim /etc/exports
/nfs/zrlog/ 172.16.1.0/24(rw,all_squash)2.创建共享目录
mkdir -p /nfs/zrlog/3.修改所有者
chown -R nobody.nobody /nfs/zrlog/4.检查
showmount -e 172.16.1.31
2.4. 🌏部署zrlog(web03)
1.安装jdk
yum -y install java-112.解压tomcat二进制包
tar xf apache-tomcat-9.0.106.tar.gz -C /app/tools/3.创建软链接
ln -s /app/tools/apache-tomcat-9.0.106/ /app/tools/tomcat3.编写systemd
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat java web container
After=network.target [Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh[Install]
WantedBy=multi-user.target4.重新加载system文件
systemctl daemon-reload5.启动tomcat
systemctl enable tomcat --now6.检查
ps -ef | grep java
ss -lntup | grep java7.部署war包
mv /app/tools/tomcat/webapps/ROOT /tmp/
mv zrlog.war /app/tools/tomcat/webapps/ROOT.war8.浏览器访问
用户界面:
http://10.0.0.9:8080
管理界面:
http://10.0.0.9:8080/admin/login9.挂载
mount -t nfs 172.16.1.31:/nfs/zrlog/ /app/tools/tomcat/webapps/ROOT/attached/10.永久挂载
vim /etc/fstab
172.16.1.31:/nfs/zrlog/ /app/tools/tomcat/webapps/ROOT/attached/ nfs defaults 0 0
2.5. 🌏部署zrlog(web04)
1.安装jdk
yum -y install java-112.拷贝web03的/app目录到web04上
#web03关闭tomcat
systemctl stop tomcat
#web03拷贝
scp -rp /app root@10.0.0.10:/3.编写systemd
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat java web container
After=network.target [Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh[Install]
WantedBy=multi-user.target4.重新加载system文件
systemctl daemon-reload5.启动tomcat
systemctl enable tomcat --now6.检查
ps -ef | grep java
ss -lntup | grep java9.挂载
mount -t nfs 172.16.1.31:/nfs/zrlog/ /app/tools/tomcat/webapps/ROOT/attached/10.永久挂载
vim /etc/fstab
172.16.1.31:/nfs/zrlog/ /app/tools/tomcat/webapps/ROOT/attached/ nfs defaults 0 0
2.6. 🍀接入nginx(web03/web04)
1.修改yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安装nginx
yum -y install nginx3.修改nginx配置文件
vim /etc/nginx/conf.d/zrlog.zhubl.xyz.conf
server {listen 80;server_name zrlog.zhubl.xyz;error_log /var/log/nginx/zrlog-error.log notice;access_log /var/log/nginx/zrlog-access.log main;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real_Ip $remote_addr;}location ~* \.(html|js|css|jpg|jpeg|bmp)$ {root /app/tools/tomcat/webapps/ROOT/;expires 7d;}
}4.重启nginx
systemctl reload nginx5.修改站点目录权限
find /app/tools/tomcat/webapps -type f |xargs chmod 644
find /app/tools/tomcat/webapps -type d |xargs chmod 755
2.7. ☀️接入负载(lb01/lb02)
1.配置nginx源
vim /etc/yum.repos.d/ngx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安装nginx
yum -y install nginx3.修改nginx配置文件
vim /etc/nginx/conf.d/lb.zbl.cn.conf
upstream zrlog_pools {server 10.0.0.9:80;server 10.0.0.10:80;
}
server {listen 80;server_name zrlog.zhubl.xyz;#error_log#access_log location / {proxy_pass http://zrlog_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Ip $remote_addr;}
}4.重启nginx
nginx -t
systemctl reload nginx
2.8. 🚀接入高可用(lb01)
1.安装keepalived
yum -y install keepalived2.备份配置文件
cp /etc/keepalived/keepalived.conf{,.bak}3.修改配置文件
vim /etc/keepalived/keepalived.conf
global_defs {router_id lb01
}
vrrp_script check_lb.sh { script /server/scripts/check_lb.shinterval 2weight 1user root
}vrrp_instance vip_3 { state MASTER interface ens33virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASSauth_pass 1111 }virtual_ipaddress { 10.0.0.3 dev ens33 label ens33:0 }track_script {check_lb.sh }
}4.编写脚本
vim /server/scripts/check_lb.sh
#1.vars
count=`ps -ef | grep nginx | wc -l`#2.stop keepalived
if [ ${count} -eq 1 ];thensystemctl stop keepalived
fi5.重启keepalived
systemctl restart keepalived.service
2.9. 🚀接入高可用(lb02)
1.安装keepalived
yum -y install keepalived2.备份配置文件
cp /etc/keepalived/keepalived.conf{,.bak}3.修改配置文件
vim /etc/keepalived/keepalived.conf
global_defs {router_id lb02
}vrrp_instance vip_3 {state BACKUPinterface ens33virtual_router_id 51priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3 dev ens33 label ens33:0}
}4.重启keepalived服务
systemctl restart keepalived.service
3. ✅tomcat配置文件
3.1. 📁 常见配置文件列表
文件名 | 说明 |
| Tomcat 的主配置文件,定义服务、连接器、引擎、主机等组件 |
| 部署描述符,定义全局默认的 Web 应用配置 |
| 定义所有 Web 应用共享的上下文配置 |
| 用户、角色和权限的配置文件,用于管理访问控制 |
| 日志配置文件,用于设置日志输出格式和位置 |
| 安全策略文件,用于 Java Security Manager |
| 包含一些系统属性,如类加载顺序、安全包等 |
3.2. 📄 server.xml
(核心配置)
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN"><!--tomcat关闭端口,连接8005,输入SHUTDOWN,tomcat关闭了. 8005默认本地连接 --><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxParameterCount="1000"/><Engine name="Catalina" defaultHost="localhost"><!--defaultHost类似于nginx default_server指定默认站点 localhost:域名--><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><!--Host部分相当于server{}部分,站点--><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host></Engine></Service>
</Server>
- 访问日志格式
tomcat | nginx | 说明 |
Host部分的pattern定义 | http区域log_format部分 | 定义访问日志的格式 |
%h | $remote_addr | 客户端ip地址 |
%t | $local_time | 访问的时间 |
%r | $request | 请求起始行(请求方法,URI,HTTP) |
%s | $status | 状态码 |
%b | $body_bytes_sent | 大小 |
%{Referer}i 新增 | $http_referer | 从哪里跳转来的(用户如何访问网站) |
%{User-Agent}i 新增 | $http_user_agent | 客户端类型,浏览器 |
%{X-Forwarded-For}i 新增 | $http_x_forwarded_for | XFF头记录 |
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access" suffix=".log"pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" "%{X-Forwarded-For}i"" />
tomcat vs nginx对比 | tomcat | nginx |
web端口 | Connector=8080 | listen 80/443 |
站点/虚拟主机 | <Host></Host>部分 | server{ }部分 |
域名 | name="localhost" | server_name |
站点目录 | appBase="webapps" | root |
自动解压(war包)zip压缩包 | unpackWARs="true" | 无 |
自动部署(加载jvm) | autoDeploy="true" | 无 |
标签 | 作用 |
| 整个 Tomcat 实例的根元素 |
| 将多个连接器绑定到一个引擎上 |
| 定义客户端与 Tomcat 之间的通信方式(HTTP、HTTPS、AJP) |
| 引擎负责处理 Service 中的所有请求 |
| 表示虚拟主机,可以配置多个 Host 实现多域名部署 |
| 每个 Web 应用的上下文路径(可在 |
| 用户认证机制,通常结合 |
| 请求处理管道中的阀门,如访问日志记录、IP过滤等 |
3.3. 🔍 常用目录结构说明
目录 | 用途 |
| 存放启动脚本(如 |
| 存放配置文件(重点目录) |
| 存放 Tomcat 和应用所需的公共 jar 包 |
| 日志文件存放目录 |
| Web 应用部署目录 |
| JSP 编译后的临时文件 |
| 临时工作目录 |
4. ✅tomcat动静分离
4.1. 📝环境准备
角色 | 主机 | ip |
数据库 | db01 | 172.16.1.51 |
存储 | nfs01 | 172.16.1.31 |
web服务(动态) | web03 | 172.16.1.8 |
web服务(静态) | web05 | 172.16.1.11 |
负载 | lb01/lb02 | 172.16.1.5/172.16.1.6 |
高可用 | keepalived | 172.16.1.3 |
4.2. 🔐准备数据库
1.安装数据库
yum -y install mariadb-server2.启动数据库
systemctl enable mariadb-server --now3.初始化数据库
#仅仅刚安装的时候运行.仅首次运行即可.
mysql_secure_installation
用于设置root密码,清理用户和清理临时库.Enter current password for root (enter for none):回车Set root password? [Y/n] Y设置密码New password: 输入密码
Re-enter new password: 再次输入
Password updated successfully!
Reloading privilege tables..... Success!Remove anonymous users? [Y/n] Y 删除数据库中的匿名用户(没有用户名的用户,容易导致安全问题)Disallow root login remotely? [Y/n] Y 是否禁止root远程登录Remove test database and access to it? [Y/n] Y 是否删除test测试用的数据库Reload privilege tables now? [Y/n] Y 是否更新权限信息表3.登录数据库,添加zrlog库,添加zrlog用户
mysql -uroot -p1
create database zrlog;
grant all on zrlog.* to 'zrlog'@'172.16.1.%' identified by 'lidao';
4.3. 💾部署存储
1.修改配置文件
vim /etc/exports
/nfs/zrlog/ 172.16.1.0/24(rw,all_squash)2.创建共享目录
mkdir -p /nfs/zrlog/3.修改所有者
chown -R nobody.nobody /nfs/zrlog/4.检查
showmount -e 172.16.1.31
4.4. 🌏部署zrlog(web03)
1.安装jdk
yum -y install java-112.解压tomcat二进制包
tar xf apache-tomcat-9.0.106.tar.gz -C /app/tools/3.创建软链接
ln -s /app/tools/apache-tomcat-9.0.106/ /app/tools/tomcat3.编写systemd
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat java web container
After=network.target [Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh[Install]
WantedBy=multi-user.target4.重新加载system文件
systemctl daemon-reload5.启动tomcat
systemctl enable tomcat --now6.检查
ps -ef | grep java
ss -lntup | grep java7.部署war包
mv /app/tools/tomcat/webapps/ROOT /tmp/
mv zrlog.war /app/tools/tomcat/webapps/ROOT.war8.浏览器访问
用户界面:
http://10.0.0.9:8080
管理界面:
http://10.0.0.9:8080/admin/login9.挂载
mount -t nfs 172.16.1.31:/nfs/zrlog/ /app/tools/tomcat/webapps/ROOT/attached/10.永久挂载
vim /etc/fstab
172.16.1.31:/nfs/zrlog/ /app/tools/tomcat/webapps/ROOT/attached/ nfs defaults 0 0
4.5. 🌏部署zrlog(web05)
1.安装jdk
yum -y install java-112.拷贝web03的/app目录到web04上
#web03关闭tomcat
systemctl stop tomcat
#web03拷贝
scp -rp /app root@10.0.0.11:/3.编写systemd
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat java web container
After=network.target [Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/tomcat
ExecStart=/app/tools/tomcat/bin/startup.sh
ExecStop=/app/tools/tomcat/bin/shutdown.sh[Install]
WantedBy=multi-user.target4.重新加载system文件
systemctl daemon-reload5.启动tomcat
systemctl enable tomcat --now6.检查
ps -ef | grep java
ss -lntup | grep java9.挂载
mount -t nfs 172.16.1.31:/nfs/zrlog/ /app/tools/tomcat/webapps/ROOT/attached/10.永久挂载
vim /etc/fstab
172.16.1.31:/nfs/zrlog/ /app/tools/tomcat/webapps/ROOT/attached/ nfs defaults 0 0
4.6. 🍀接入nginx-动态(web03)
1.修改yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安装nginx
yum -y install nginx3.修改nginx配置文件
vim /etc/nginx/conf.d/zrlog.zhubl.xyz.conf
server {listen 80;server_name zrlog.zhubl.xyz;error_log /var/log/nginx/zrlog-error.log notice;access_log /var/log/nginx/zrlog-access.log main;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real_Ip $remote_addr;}location ~* \.(html|js|css|jpg|jpeg|bmp)$ {root /app/tools/tomcat/webapps/ROOT/;expires 7d;}
}4.重启nginx
nginx -t
systemctl reload nginx5.修改站点目录权限
find /app/tools/tomcat/webapps -type f |xargs chmod 644
find /app/tools/tomcat/webapps -type d |xargs chmod 755
4.7. 🍀接入nginx-静态(web05)
1.修改yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安装nginx
yum -y install nginx3.修改nginx配置文件
vim /etc/nginx/conf.d/zrlog.zhubl.xyz.conf
server {listen 80;server_name zrlog.zhubl.xyz;root /app/tools/tomcat/webapps/ROOT/;error_log /var/log/nginx/zrlog-error.log notice;access_log /var/log/nginx/zrlog-access.log main;location / {index index.html}
}4.重启nginx
nginx -t
systemctl reload nginx5.修改站点目录权限
find /app/tools/tomcat/webapps -type f |xargs chmod 644
find /app/tools/tomcat/webapps -type d |xargs chmod 755
4.8. ☀️接入负载(lb01/lb02)
1.配置nginx源
vim /etc/yum.repos.d/ngx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true2.安装nginx
yum -y install nginx3.修改nginx配置文件
vim /etc/nginx/conf.d/lb.zbl.cn.conf
upstream zrlog_static {server 10.0.0.11:80;
}
upstream zrlog_default {server 10.0.0.9:80;server 10.0.0.10:80;
}
server {listen 80;server_name zrlog.zhubl.xyz;#error_log#access_log location / {proxy_pass http://zrlog_default;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Ip $remote_addr;}location ~* \.(html|css|js) {proxy_pass http://zrlog_static;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Ip $remote_addr;}
}4.重启nginx
nginx -t
systemctl reload nginx
4.9. 🚀接入高可用(lb01)
1.安装keepalived
yum -y install keepalived2.备份配置文件
cp /etc/keepalived/keepalived.conf{,.bak}3.修改配置文件
vim /etc/keepalived/keepalived.conf
global_defs {router_id lb01
}
vrrp_script check_lb.sh { script /server/scripts/check_lb.shinterval 2weight 1user root
}vrrp_instance vip_3 { state MASTER interface ens33virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASSauth_pass 1111 }virtual_ipaddress { 10.0.0.3 dev ens33 label ens33:0 }track_script {check_lb.sh }
}4.编写脚本
vim /server/scripts/check_lb.sh
#1.vars
count=`ps -ef | grep nginx | wc -l`#2.stop keepalived
if [ ${count} -eq 1 ];thensystemctl stop keepalived
fi5.重启keepalived
systemctl restart keepalived.service
4.10. 🚀接入高可用(lb02)
1.安装keepalived
yum -y install keepalived2.备份配置文件
cp /etc/keepalived/keepalived.conf{,.bak}3.修改配置文件
vim /etc/keepalived/keepalived.conf
global_defs {router_id lb02
}vrrp_instance vip_3 {state BACKUPinterface ens33virtual_router_id 51priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3 dev ens33 label ens33:0}
}4.重启keepalived服务
systemctl restart keepalived.service
5. ✅总结
- zrlog与nginx结合🌟🌟🌟🌟🌟
- zrlog集群🌟🌟🌟🌟🌟
- zrlog动静分离