一、tomcat
1、自建博客
[root@zzzcentos1 ~]#systemctl stop firewalld
[root@zzzcentos1 ~]#setenforce 0
[root@zzzcentos1 ~]#cd /data/
[root@zzzcentos1 data]#rz -E
rz waiting to receive.
[root@zzzcentos1 data]#ls
apache-tomcat-9.0.16 apache-tomcat-9.0.16.tar.gz jdk-8u291-linux-x64.tar.gz jpress-v3.2.1.war
[root@zzzcentos1 data]#systemctl start tomcat
[root@zzzcentos1 data]#cp jpress-v3.2.1.war /usr/local/tomcat/webapps/
[root@zzzcentos1 data]#cd /usr/local/tomcat/webapps/
[root@zzzcentos1 webapps]#ls
docs examples host-manager jpress-v3.2.1 jpress-v3.2.1.war manager ROOT test test.html test.jsp
[root@zzzcentos1 webapps]#ln -s jpress-v3.2.1 jpress
[root@zzzcentos1 webapps]#ll
[root@zzzcentos1 webapps]#cat >/etc/yum.repos.d/mysql.repo <<EOF
> [mysql57-community]
> name=MySQL 5.7 Community Server
> baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
> enabled=1
> gpgcheck=0
> EOF
[root@zzzcentos1 webapps]#yum -y install mysql-community-server
[root@zzzcentos1 webapps]#systemctl start mysqld
[root@zzzcentos1 webapps]#ss -ntap |grep 3306
LISTEN 0 80 :::3306 :::* users:(("mysqld",pid=4082,fd=21))
[root@zzzcentos1 webapps]#mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@zzzcentos1 webapps]#grep password /var/log/mysqld.log #过滤密码
2024-03-01T05:34:17.775889Z 1 [Note] A temporary password is generated for root@localhost: R/nj%#.u3=5V
2024-03-01T05:39:18.713499Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
[root@zzzcentos1 webapps]#mysql -uroot -p'R/nj%#.u3=5V'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.44
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set global validate_password_policy=0; #修改密码策略
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1; #修改密码策略
Query OK, 0 rows affected (0.01 sec)
mysql> alter user root@'localhost' identified by 'Admin@123'; #设置用户密码
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye
[root@zzzcentos1 webapps]#mysql -uroot -p'Admin@123'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE blog;
ERROR 1007 (HY000): Can't create database 'blog'; database exists
mysql> GRANT all ON blog.* TO 'bloguser'@'%' IDENTIFIED BY 'admin123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> GRANT all ON blog.* TO 'bloguser'@'localhost' IDENTIFIED BY 'admin123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye
[root@zzzcentos1 webapps]#
cat >/etc/yum.repos.d/mysql.repo <<EOF
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
enabled=1
gpgcheck=0
EOF
set global validate_password_policy=0;
set global validate_password_length=1;
#修改密码策略
mysql> alter user root@'localhost' identified by 'Admin@123';
CREATE DATABASE blog;
GRANT all ON blog.* TO 'bloguser'@'%' IDENTIFIED BY 'admin123';
GRANT all ON blog.* TO 'bloguser'@'localhost' IDENTIFIED BY 'admin123';
flush privileges;
去浏览器访问:
服务器可以查看图片上传的位置:
mysql 中 mysql 、admin 这些软件是工具,mysql端口号3306
2、破解密码:
①进入配置文件:
看到密码被清空了
[root@zzzcentos1 webapps]#vim /etc/my.cnf
skip-grant-tables # 末尾加入
[root@zzzcentos1 webapps]#systemctl restart mysqld
[root@zzzcentos1 webapps]#mysql -uroot
mysql> update mysql.user set authentication_string='' where user='root' and host='localhost';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)
mysql> quit
Bye
[root@zzzcentos1 webapps]#pwd
/usr/local/tomcat/webapps
[root@zzzcentos1 webapps]#vim /etc/my.cnf
skip-grant-tables #删除它
[root@zzzcentos1 webapps]#systemctl restart mysqld
[root@zzzcentos1 webapps]#pwd
/usr/local/tomcat/webapps
[root@zzzcentos1 webapps]#mysql -uroot
如果再想设置密码
show databases可以查看系统数据库有什么内容;存放了用户信息(用户名和用户密码)
3. 状态页
默认的管理页面被禁用
server status 状态页
manger app 管理项目
host manger 配置虚拟主机的设置
(一) server status 状态页
状态页比较重要,对权限有要求,不能通过远端进入
我们可以根据状态页的提示信息进入配置文件进行修改
①开启状态页 修改conf/conf/tomcat-users.xml
root@zzzcentos1 manager]#pwd
/usr/local/tomcat/webapps/manager
[root@zzzcentos1 manager]#cd /usr/local/tomcat/conf/
[root@zzzcentos1 conf]#vim tomcat-users.xml
[root@zzzcentos1 conf]#systemctl restart tomcat
[root@zzzcentos1 conf]#
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
②去浏览器访问
修改完之后,去浏览器看还是不可以,只允许通过安装Tomcat的服务器本地进行登录
然后我们去安装Tomcat的服务器的虚拟机看:
tomcat 开启允许远程状态页
[root@zzzcentos1 webapps]#cd manager/
[root@zzzcentos1 manager]#ls
images index.jsp META-INF status.xsd WEB-INF xform.xsl
[root@zzzcentos1 manager]#cd META-INF/
[root@zzzcentos1 META-INF]#ls
context.xml
[root@zzzcentos1 META-INF]#pwd
/usr/local/tomcat/webapps/manager/META-INF
[root@zzzcentos1 META-INF]#vim context.xml
[root@zzzcentos1 META-INF]#systemctl restart tomcat
[root@zzzcentos1 META-INF]#
由于状态页比较重要,在设置登录权限时需要注意哪些地址可以访问,一般不建议开启远程登录
(二)manger app 管理项目
Apache Tomcat的Manager App界面是一个基于Web的管理工具,用于管理和监控部署在Tomcat服务器上的Web应用程序。访问路径为/manager/html
(三)host manger 配置虚拟主机的设置
解决办法与状态页一样
tomcat 开启允许远程登录
4.常见配置详解——端口安全
在conf/server.xml 有以下内容
[root@zzzcentos1 META-INF]#vim /usr/local/tomcat/conf/server.xml
8005是Tomcat的管理端口,默认监听在127.0.0.1上。无需验证就可发送SHUTDOWN (大小写敏感)这个字符串,tomcat接收到后就会关闭此Server
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>
8005是Tomcat的管理端口,默认监听在127.0.0.1上。无需验证就可发送SHUTDOWN (大小写敏感)这个字符串,tomcat接收到后就会关闭此Server
[root@centos7 ~]#telnet 127.0.0.1 8005 #优雅的关闭
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN #执行命令关闭tomcat
Connection closed by foreign host.
此管理功能建议禁用,可将SHUTDOWN改为一串猜不出的字符串实现或者port修改成 0,会使用随机端口 如:36913
port设为-1等无效端口,将关闭此功能此行不能被注释,否则无法启动tomcat服务
一般不动,不修改
<Server port="8005" shutdown="xxxxxxxx">
5.tomcat 端口号
8080: 默认接收 http 请求的端口
8005: 安全端口,可以关闭tomcat
8009: apache 和 tomcat 联动 AJP 协议
6.虚拟主机配置
就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.kgc.com,www.accp.com希望通过这两个域名访问到不同的项目内容。(即一台服务器有两个域名)
[root@zzzcentos1 data]#mkdir /data/web{1,2,3}/ROOT/ -p
[root@zzzcentos1 data]#echo web1 www.a.com > /data/web1/ROOT/index.html
[root@zzzcentos1 data]#echo web2 www.b.com > /data/web2/ROOT/index.html
[root@zzzcentos1 data]#echo web3 www.c.com > /data/web3/ROOT/index.html
[root@zzzcentos1 data]#cat /data/web1/ROOT/index.html
web1 www.a.com
[root@zzzcentos1 data]#cat /data/web2/ROOT/index.html
web2 www.b.com
[root@zzzcentos1 data]#cat /data/web3/ROOT/index.html
web3 www.c.com
[root@zzzcentos1 data]#vim /usr/local/tomcat/conf/server.xml
</Host>
165 <Host name="www.a.com" appBase="/data/web1"
166 unpackWARs="true" autoDeploy="true">
167 </Host>
168 <Host name="www.b.com" appBase="/data/web2"
169 unpackWARs="true" autoDeploy="true">
170 </Host>
171 <Host name="www.c.com" appBase="/data/web3"
172 unpackWARs="true" autoDeploy="true">
173 </Host>
[root@zzzcentos1 data]#systemctl restart tomcat.service
[root@zzzcentos1 data]#
另一台机器
[root@zzzcentos2 ~]#systemctl stop firewalld
[root@zzzcentos2 ~]#setenforce 0
[root@zzzcentos2 ~]#vim /etc/hosts
[root@zzzcentos2 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.246.7 www.a.com www.b.com www.c.com
[root@zzzcentos2 ~]#curl www.a.com:8080
web1 www.a.com
[root@zzzcentos2 ~]#curl www.b.com:8080
web2 www.b.com
[root@zzzcentos2 ~]#curl www.c.com:8080
web3 www.c.com
[root@zzzcentos2 ~]#
检测:
7.Context配置
Context作用:
-
路径映射:将url映射至指定路径,而非使用appBase下的物理目录,实现虚拟目录功能
-
应用独立配置,例如单独配置应用日志、单独配置应用访问控制
#映射指定路径
<Context path="/test" docBase="/data/test" reloadable="true" />
#映射站点的根目录
<Context path="/" docBase="/data/website" reloadable="true" />
#还可以添加日志等独立的配置
<Context path="/test" docBase="/data/test" reloadable="true" >
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_test_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Context>
说明:
-
path:指的是访问的URL路径,如果path与appBase下面的子目录同名,context的docBase路径优先更高
-
docBase:可以是磁盘文件的绝对路径,也可以是相对路径(相对于Host的appBase)
-
reloadable:true表示如果WEB-INF/classes或META-INF/lib目录下.class文件有改动,就会将WEB应用重新加载。生产环境中,建议使用false来禁用
去检测:
[root@zzzcentos1 data]#vim /usr/local/tomcat/conf/server.xml
<Context path="/test" docBase="/data/test" reloadable="true" />
#添加这一行,如果访问test就去/data/test下面
[root@zzzcentos1 data]#systemctl restart tomcat #重启tomcat服务
[root@zzzcentos1 data]#systemctl status tomcat
[root@zzzcentos1 data]#mkdir test/
[root@zzzcentos1 data]#cd test/
[root@zzzcentos1 test]#echo welcome to test > index.html
另一台主机检测
[root@zzzcentos2 ~]#curl www.a.com:8080/test/
welcome to test
[root@zzzcentos2 ~]#
9.tomcat +nginx 动静分离
实验: 利用 nginx 反向代理实现全部转发至指定同一个虚拟主机
客户端curl www.a.com 访问nginx服务,nginx服务通过配置反向代理proxy_pass www.a.com:8080,最终客户端看到的是www.a.com
实验:7-3 做客户机,7-2做代理服务器,7-1 tomcat 服务器 数据传输从7-3到7-2到7-1
7-1参考tomcat虚拟主机配置
① 7-2做代理服务器配置
[root@zzzcentos2 ~]#systemctl stop firewalld
[root@zzzcentos2 ~]#setenforce 0
[root@zzzcentos2 ~]#rpm -q nginx
未安装软件包 nginx
[root@zzzcentos2 ~]#yum install epel-release.noarch -y
[root@zzzcentos2 ~]#yum install nginx -y
[root@zzzcentos2 ~]#systemctl start nginx
[root@zzzcentos2 ~]#systemctl status nginx
进入/etc/nginx/nginx.conf编辑
7-3客户机配置
[root@localhost ~]#rpm -q nginx
未安装软件包 nginx
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install nginx -y #安装nginx服务
[root@localhost ~]#systemctl start nginx #开启nginx服务
[root@localhost ~]#systemctl status nginx
[root@zzzcentos3 ~]#rpm -q nginx
nginx-1.20.1-10.el7.x86_64
[root@zzzcentos3 ~]#vim /etc/hosts
[root@zzzcentos3 ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.246.8 www.a.com www.b.com www.c.com
检测:
代理服务器那里写什么就显示什么
10.tomcat补充内容:
#这些为注释的信息。它定义了Tomcat服务器中的角色(roles)和用户(users),以及这些
#用户所归属的角色。(角色的含义相当于用户组)
<role rolename="tomcat"/>
#定义了一个名为 "tomcat" 的角色,这个角色可以对应于Tomcat服务器预定义的一些权限,比如
#访问管理界面或部署应用等。
<role rolename="role1"/>
#定义了一个名为 "role1" 的自定义角色,可以根据实际需求赋予特定权限。
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
#定义了一个用户名为 "tomcat" 的用户,并设置了初始密码(这里需要在实际使用时替换为强密码)
#该用户归属于 "tomcat" 角色,因此拥有与该角色关联的所有权限。
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
#定义了一个用户名为 "both" 的用户,同样设置了初始密码。这个用户同时属于 "tomcat"
#和 "role1" 两个角色,因此拥有这两个角色合并后的所有权限。
<user username="role1" password="<must-be-changed>" roles="role1"/>
#定义了一个仅属于 "role1" 角色的用户。
PS Eden Space
'这是年轻代(Young Generation)的一部分,主要用于存储新创建的对象。当前已使用的内
存大小为210.02 MB,占其总容量(225.50 MB)的约93%。'
PS Old Gen
'这是老年代(Old Generation),存放长期存活或晋升过来的对象。当前已使用的内存大小
为25.57 MB,占其总容量(629.50 MB)的4%。'
PS Survivor Space
'同样是年轻代的一部分,用于保存在年轻代中经历过一次GC但尚未被回收的对象。当前已使用的
内存大小为7.54 MB,占其总容量(45.00 MB)的16%。'
Code Cache
'非堆内存区域,用于存储JIT编译后的机器码。当前已使用的内存大小为12.97 MB,占其最大可
扩展容量(240.00 MB)的5%。'
Compressed Class Space
'另一个非堆内存区域,当类空间过大时,经过压缩的类会被存放到此区域以节省内存。当前已使
用的内存大小为6.58 MB,占其最大容量(1024.00 MB)的0%,这里的“0%”可能是显示错误,因
为已经使用了6.58 MB的空间。'
Metaspace
'从Java 8开始取代了永久代(PermGen),用于存储类元数据信息。这里显示的最大容量为“-0.00 MB”,
这意味着Metaspace的大小可以动态调整,不受固定上限限制;当前已使用的内存大小为54.99 MB'