tomcat

 

1. tomcat 基本概述

1.1 Tomcat是什么?

1. 与nginx一样是web服务器,提供Java的解析以及静态资源的解析

2. 不同的是nginx只能解析静态资源,tomcat可以解析java和静态资源

3. 企业中一般会使用tomcat+nginx,tomcat解析动态资源(Java) nginx解析静态资源

# tomcat+nginx
[root@web01 ~]# cat /etc/nginx/conf.d/tomcat.zy.com.conf
server {
    listen 80;
    server_name tomcat.zy.com;

    location / {
        proxy_pass http://127.0.0.1:8080;  # 通过反向代理的方式
    }
    location ~* \.(png|gif|jpg)$ {
        root /images;
    }
} 

1.2 为什么要先安装Java?

tomcat是java的程序,那就要运行在jiava环境中

jvm:  java的虚拟机

jre:   java的运行环境 包含了jvm虚拟机

jdk:  java的开发环境 包含了jre

单纯的运行java项目需要提供 jvm + jre =jdk=java

2. tomcat的安装 

2.1 安装运行环境

$ yum install java -y

2.2 安装tomcat

# 准备tomcat代码目录
mkdir /soft

# 下载tomcat代码
cd /soft && \
wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz && \
tar xf apache-tomcat-9.0.37.tar.gz && \
ln -s apache-tomcat-9.0.37 tomcat

3. tomcat 配置文件

3.1 虚拟主机配置文件认识

<?xml version="1.0" encoding="UTF-8"?>

<!--server表示的是一个Tomcat实例,可以通过本地8005端口关闭Tomcat-->
<Server port="8005" shutdown="SHUTDOWN">
	<!--监听器、跳过-->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  
<!--全局资源-->
  <GlobalNamingResources>
  	<!--Base认证模块、所有站点都能用 conf/tomcat-users.xml文件 -->
    <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">
  
  	<!--<!--Http连接器,处理http的请求与响应-->-->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

		<!--引擎-->
    <Engine name="Catalina" defaultHost="localhost">
    
			<!--调用Basic认证-->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      
			<!--虚拟主机-->
      <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 &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

3.2 Tomcat 虚拟主机配置图解

1. 定义虚拟主机 域名·为tomcat1.zy.com

      <Host name="tomcat1.zy.com"  appBase="/code/tomcat1"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

2. 创建站点目录 

mkdir /code.tomcat1/ROOT
echo 'tomcat testing is OK!' > /code/tomcat1/ROOT/index.html

3. 重启tomcat 

$ /soft/tomcat/bin/shutdown.sh
$ /soft/tomcat/bin/startup.sh

4. 浏览器访问

 

5. 配置 不同 uri 访问不同资源 (相当于配置nginx中的location)

#context 相当于nginx的 location 在虚拟主机中配置 (增加一行)
<!--Location tomcat1.zy.com/test 实际映射到 /code/admin目录中 -->
 <Context docBase="/code/admin" path="/test" reloadable="ture" /> 
 
[root@web01 ROOT]# mkdir /code/admin
[root@web01 ROOT]# echo "context testing is OK" > /code/admin/index.html
[root@web01 ROOT]# /soft/tomcat/bin/shutdown.sh 
[root@web01 ROOT]# /soft/tomcat/bin/startup.sh

 4. Tomcat 管理页面

当我们点这三个按钮时状态码为403拒绝,然后提示需要在 conf/tomcat-user.xml 中添加角色以及密码

1. 1.配置角色,并新增用户关联角色 

[root@web01 ~]# vim /soft/tomcat/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="admin-gui,manager-gui"/>

 2. 光配置完还不行,需要去增加一个网段白名单 默认只允许本地127网段访问

# 允许10网段访问该角色的资源 (项目仅127,所以要修改)
[root@web01 ~]# vim  /soft/tomcat/webapps/host-manager/META-INF/context.xml
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />

[root@web01 ~]# vim /soft/tomcat/webapps/manager/META-INF/context.xml
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />

[root@web01 ~]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh

 5. 部署一个java博客(zrlog)

1、安装数据库

$ yum install mariadb mariadb-server -y
$ systemctl enable mariadb
$ systemctl start mariadb

2、创建项目库 

$ mysql -uroot -e "create database zrlog charset utf8;"
$ grant all on zrlog.* to zrlog@'127.0.0.1' identified by '123456'; 

3、添加虚拟主机 

$ vim /soft/tomcat/conf/server.xml
      <Host name="zrlog.zy.com"  appBase="/code/zrlog"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

4、准备站点目录并将代码拷贝至站点目录下

$ mkdir /code/zrlog && cd /code/zrlog
$ wget http://dl.zrlog.com/release/zrlog-2.1.11-99a5759-release.war?attname=ROOT.war&ref=index
$ mv zrlog-2.1.11-99a5759-release.war\?attname\=ROOT.war ROOT.war 

5、重启tomcat(会自动解压并创建同名目录)

$ /soft/tomcat/bin/shutdown.sh 
$ /soft/tomcat/bin/startup.sh
$ ls /code/zrlog/
logs  ROOT  ROOT.war

6、web访问 根据提示填写数据库及管理员信息 

 

6. 拆分数据库

1. 准备新的数据库机器 并安装mariadb

# 新的机器上安装数据库(10.0.0.51)
yum install mariadb mariadb-server -y
systemctl enable mariadb 
systemctl start mariadb

 2. 备份原数据库数据

$ mysqldump -uroot -B zrlog >/tmp/zrlog.sql
$ scp /tmp/zrlog.sql 10.0.0.51:~ 

3. 新数据库 并导入备份数据 创建远程连接用户

$ mysql -e "source ~/zrlog.sql"
$ mysql -e "grant all on zrlog.* to zrlog@'%' identified by '123';"

4、停源库,配置程序连接新数据库 

systemctl stop mariadb
[root@web01 ~]# cat /code/zrlog/ROOT/WEB-INF/db.properties 
#This is a database configuration file
#Thu Aug 20 22:48:47 CST 2020
driverClass=com.mysql.cj.jdbc.Driver
user=zrlog
password=123456
jdbcUrl=jdbc\:mysql\://10.0.0.51\:3306/zrlog?characterEncoding\=UTF-8&allowPublicKeyRetrieval\=true&useSSL\=false&serverTimezone\=GMT

7. 扩展web 节点

# 10.0.0.8 web02
$ yum install java -y
$ mkdir /soft

# 将web01上的Tomcat 代码 以及zrlog代码拷贝至web02(zrlog代码包含了连接数据库的信息)
$ scp -rp /soft/apache-tomcat-9.0.37 root@10.0.0.8:/soft/
$ scp -rp /code root@10.0.0.8:/

8. 静态资源共享

1. 准备nfs服务器 并 配置

$ yum install nfs-utils -y
$ cat /etc/exports
/data/zrlog 10.0.0.0/24(rw,async,all_squash,anonuid=666,anongid=666)

 2. 根据配置文件,做服务启动前的初始化

# 我习惯会将共享目录给www用户
$ mkdir /data/zrlog -p
$ groupadd -g 666 www
$ useradd -u 666 -g www

3. nfs 服务启动

$ systemctl start nfs
$ systemctl enable nfs

 4. 客户端验证(每个web节点) 如果列出以下信息就证明成功了

$ yum install nfs-utils -y
$ show mount -e 10.0.0.31
Export list for 10.0.0.31.31:
/data/zrlog 10.0.0.0/24

5. 执行挂载操作(每个web节点) 

$ mount -t nfs 10.0.0.31:/data/zrlog /code/zrlog/ROOT/attached/
.....自行加入开机自动挂载.......

9. 接入负载均衡

1. 准备lb服务器 并启动配置

$ yum install nginx -y
$ vim /etc/nginx/conf.d/proxy_zrlog.zy.com.conf
upstream zrlog {
    server 10.0.0.7:8080;
    server 10.0.0.8:8080;
}

server {
    listen 80;
    server_name zrlog.zy.com;

    location / {
        proxy_pass http://zrlog;
        proxy_set_header host $http_host;
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2. 重载nginx服务让配置生效 

$ systemctl reload nginx

3. 访问测试(配置host劫持 web页面访问) 

10.0.0.5 zrlog.zy.com

10. 实现全栈https

1. 生成证书(如果有这一步可以省去)

[root@lb01 ~]# mkdir /etc/nginx/ssl_key
[root@lb01 ~]# cd /etc/nginx/ssl_key
[root@lb01 ssl_key]# openssl genrsa -idea -out server.key 2048
Enter pass phrase for server.key:1234
Verifying - Enter pass phrase for server.key:1234

[root@lb01 ssl_key]# openssl req -days 36500 -x509 \
  -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

 2. 部署证书

upstream zrlog {
        server 172.16.1.7:8080;
        server 172.16.1.8:8080;
}

server {
        listen 443 ssl;
        server_name zrlog.zy.com;
        ssl_certificate ssl_key/server.crt;
        ssl_certificate_key ssl_key/server.key;

        location / {
                proxy_pass http://zrlog;
                proxy_set_header host $http_host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

server {
        listen 80;
        server_name zrlog.zy.com;

        return 302 https://$server_name$request_uri;
}

11. 基于 redis 实现会话保持

zrlog 的session存储在数据库中,所以不实现zrlog的会话共享了

11.1 准备测试代码 (先看下没有实现session绘画共享的效果)

1. 创建测试站点(web01、web02)

        <!--session测试站点-->
      <Host name="session.zy.com"  appBase="/code/session"
            unpackWARs="true" autoDeploy="true">
      </Host>

 2. 创建站点目录,放入测试代码

[root@web01 ~]# mkdir /code/session/ROOT -p
[root@web01 ~]# vim /code/session/ROOT/index.jsp
<body>
<%
//HttpSession session = request.getSession(true);
System.out.println(session.getCreationTime());
out.println("<br> web01 SESSION ID:" + session.getId() + "<br>");
out.println("Session created time is :" + session.getCreationTime()
+ "<br>");
%>
</body>

3.重启tomcat

/soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh

 

4. 接入负载均衡 host劫持 测试 (可以看到下图 是没有实现session会话共享的

11.2 实现会话共享 

1. 准备新机器安装redis(可以在mariadb上)

yum install  redis -y

 2. 配置redis

[root@db01 ~]# grep "^[a-Z]" /etc/redis.conf
bind 127.0.0.1 172.16.1.51
requirepass 123456

3. web上安装redis-manager (每个web节点)

[root@web01 ~]# wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/4.0/tomcat-cluster-redis-session-manager.zip
[root@web01 ~]# unzip tomcat-cluster-redis-session-manager.zip
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/lib/* /soft/tomcat/lib/
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/conf/* /soft/tomcat/conf/

4. 修改tomcat 配置文件 加以下两行内容 

[root@web01 ~]# vim /soft/tomcat/conf/context.xml
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />

5. 添加 redis连接信息 

[root@web01 ~]# vim /soft/tomcat/conf/redis-data-cache.properties
redis.hosts=172.16.1.51:6379
redis.password=123456

6. 重启tomcat 

[root@web01 ~]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值