Tomcat基本介绍
JVM基本介绍
Java业务都是运行在Java虚拟机上,Java虚拟机简称为JVM
Java为什么要用虚拟机
① 早期的C语言不支持跨平台,在Windows、Linux等平台运行的时候,需要分别进行编译
② Java则可以跨平台,只需要将源代码进行一次编译,就可以在多处运行
(Java需要在Windows或Linux运行一个jvm,这样就能够将Java编译好的war包在Windows和Linux平台运行起来,无需进行重复编译。)
Java环境中的JRE和JDK的区别
jre是Java运行环境
jdk是Java开发环境,会包含Java的运行环境jre。
总的来说:Tomcat 是基于Java开发一个web服务器软件,和nginx类似。
Tomcat和nginx的区别
nginx仅支持静态资源的解析,而Tomcat则支持Java开发的jsp动态资源
nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。
通常情况下,企业会使用nginx+tomcat结合,由nginx处理静态资源,由tomcat处理动态资源。
二、Tomcat安装
安装Tomcat
[root@web01 ~]# yum install java -y
二进制安装tomcat
[root@web01 ~]# mkdir /soft && cd /soft
[root@web01 soft]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.26/bin/apache-tomcat-9.0.26.tar.gz
[root@web01 soft]# tar xf apache-tomcat-9.0.26.tar.gz
[root@web01 soft]# ln -s /soft/apache-tomcat-9.0.26 /soft/tomcat
[root@web01 soft]# /soft/tomcat/bin/startup.sh
[root@web01 soft]# netstat -lntp|grep java
tcp6 0 0 :::8009 :::* LISTEN 8500/java
tcp6 0 0 :::8080 :::* LISTEN 8500/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8500/java
二进制:
jdk使用二进制
tomcat使用二进制
[root@web01 ~]# mkdir /soft/
[root@web01~]# tar xf jdk-8u60-linux-x64.tar.gz -C /app/
[root@web01 ~]# ln -s /soft/jdk1.8.0_60 /soft/jdk
[root@web01~]# vim /etc/profile
#...最后面添加...
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
[root@web01~]# tar xf apache-tomcat-9.0.26.tar.gz -C /soft
[root@web01 ~]# /soft/apache-tomcat-9.0.26/bin/startup.sh
Tomcat配置文件详解
一个server表示一个tomcat实例
一个server中包含多个Connector连接器,Connector的主要功能是接受、响应用户请求。
service的作用是:将connector关联至engine(catalina引擎)
一个host就是一个站点,类似于nginx的多站点
context类似于nginx中location的概念![#### Tomcat基本介绍
JVM基本介绍
Java业务都是运行在Java虚拟机上,Java虚拟机简称为JVM
Java为什么要用虚拟机
① 早期的C语言不支持跨平台,在Windows、Linux等平台运行的时候,需要分别进行编译
② Java则可以跨平台,只需要将源代码进行一次编译,就可以在多处运行
(Java需要在Windows或Linux运行一个jvm,这样就能够将Java编译好的war包在Windows和Linux平台运行起来,无需进行重复编译。)
Java环境中的JRE和JDK的区别
jre是Java运行环境
jdk是Java开发环境,会包含Java的运行环境jre。
总的来说:Tomcat 是基于Java开发一个web服务器软件,和nginx类似。
Tomcat和nginx的区别
nginx仅支持静态资源的解析,而Tomcat则支持Java开发的jsp动态资源
nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。
通常情况下,企业会使用nginx+tomcat结合,由nginx处理静态资源,由tomcat处理动态资源。
二、Tomcat安装
安装Tomcat
[root@web01 ~]# yum install java -y
二进制安装tomcat
[root@web01 ~]# mkdir /soft && cd /soft
[root@web01 soft]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.26/bin/apache-tomcat-9.0.26.tar.gz
[root@web01 soft]# tar xf apache-tomcat-9.0.26.tar.gz
[root@web01 soft]# ln -s /soft/apache-tomcat-9.0.26 /soft/tomcat
[root@web01 soft]# /soft/tomcat/bin/startup.sh
[root@web01 soft]# netstat -lntp|grep java
tcp6 0 0 :::8009 :::* LISTEN 8500/java
tcp6 0 0 :::8080 :::* LISTEN 8500/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8500/java
二进制:
jdk使用二进制
tomcat使用二进制
[root@web01 ~]# mkdir /soft/
[root@web01~]# tar xf jdk-8u60-linux-x64.tar.gz -C /app/
[root@web01 ~]# ln -s /soft/jdk1.8.0_60 /soft/jdk
[root@web01~]# vim /etc/profile
#...最后面添加...
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
[root@web01~]# tar xf apache-tomcat-9.0.26.tar.gz -C /soft
[root@web01 ~]# /soft/apache-tomcat-9.0.26/bin/startup.sh
Tomcat配置文件详解
一个server表示一个tomcat实例
一个server中包含多个Connector连接器,Connector的主要功能是接受、响应用户请求。
service的作用是:将connector关联至engine(catalina引擎)
一个host就是一个站点,类似于nginx的多站点
context类似于nginx中location的概念
Tomcat配置虚拟主机
[root@web01~]# cat /soft/tomcat/conf/server.xml
<!--tomcat虚拟主机-->
<Host name="tomcat1.oldxu.com" appBase="/code1"
unpackWARs="true" autoDeploy="true">
<!--类似于nginx的location path是访问的路径 ->映射 docBase是真实的路径-->
<Context docBase="/code1/admin" path="/test" reloadable="true"/>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="tomcat1_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
PS:如果无法启动
1.替换配置文件: pkill java 然后在启动
2.配置文件写错
3.虚拟主机是添加,不要修改
4.context如果写了,一定要有对应的目录,不然整体就报错
5.查看日志/soft/tomcat/logs/catalina.out
三、项目演示
Tomcat部署博客项目zrlog
- 配置server.xml文件 ,新增在 engline
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
<!--zrlog站点-->
<Host name="zrlog.oldxu.com" appBase="/code/zrlog"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="zrlog_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
- 创建站点目录,上传zrlog的war包
[root@web01 ~]# mkdir /code/zrlog
[root@web01 ~]# cd /code/zrlog/
[root@web01 zrlog]# rz ROOT.war
PS:包名就命名为ROOT.war
- 重启Tomcat服务
[root@web01 zrlog]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh && tail -f /soft/tomcat/logs/catalina.out
- 配置域名劫持
- 在172.16.1.51的数据库上,创建一个zrlog的库,配置授权访问用户
[root@db01 ~]# mysql -uroot -pwyw.com
MariaDB [(none)]> create database zrlog charset utf8;
<---此前配置过all用户,可以复用
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'wyw.com';
Tomcat部署博客项目jpress
- 配置server.xml文件 ,新增在 engline
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
<!--jpress站点-->
<Host name="jpress.oldxu.com" appBase="/code/jpress"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="jpress_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
- 创建站点目录,上传jpress的war包
[root@web01 ~]# mkdir /code/jpress
[root@web01 ~]# cd /code/jpress/
[root@web01 jpress]# rz jpress.war
[root@web01 jpress]# mv jpress.war ROOT.war
PS:包名就命名为ROOT.war
- 重启Tomcat服务
[root@web01 jpress]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh && tail -f /soft/tomcat/logs/catalina.out
- 配置域名劫持
- 在172.16.1.51的数据库上,创建一个jpress的库,配置授权访问用户
[root@db01 ~]# mysql -uroot -pwyw.com
MariaDB [(none)]> create database jpress charset utf8;
<---此前配置过all用户,可以复用
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'wyw.com';
四、Tomcat配置基础认证
开启 Server Status Host Manager页面
- 配置conf/tomcat-users.xml
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="manager-gui"/>
- 如果访问还是403,是因为tomcat默认仅运行本地访问该管理页面,需要允许同网段主机访问
[root@web01 ~]# ll /soft/tomcat/webapps/manager/
[root@web01 ~]# ll /soft/tomcat/webapps/host-manager/
[root@es-web01 tomcat]# vim 项目目录下/META-INF/context.xml
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
#修改为
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />
- 启用zrlog的基础认证(Nginx的basic认证) ---> zrlog.oldxu.com/admin
server {
listen 80;
server_name zrlog.oldxu.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
}
location /admin {
auth_basic "closed site";
auth_basic_user_file conf/auth_conf;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
}
}
[root@es-web01 tomcat]# vim /code/zrlog/ROOT/WEB-INF/web.xml
<web-app>
...
<security-constraint>
<web-resource-collection>
<web-resource-name>zrlog</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>zrlog_role</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Default</realm-name>
</login-config>
...
</web-app>
#配置用户名密码,关联对应的角色(多个role不要使用相同用户)
[root@es-node1 tomcat]# vim /soft/tomcat/conf/tomcat-users.xml
<role rolename="zrlog_role"/>
<user username="tomcat" password="123456" roles="zrlog_role"/>
#重启tomcat
[root@web01 ~]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh
五、多节点部署
① tomcat-->mysql
10.0.0.7 ---> 10.0.0.51
10.0.0.8 ---> 10.0.0.51
先在10.0.0.8安装java
- 安装jdk
[root@web02 ~]# yum install java -y
- 安装tomcat 部署代码 (scp)
在web01上操作
[root@web01 ~]# scp -rp /soft root@172.16.1.8:/
[root@web01 ~]# scp -rp /code/zrlog root@172.16.1.8:/code/
在web02上操作
[root@web02 soft]# rm -rf /soft/tomcat/
[root@web02 soft]# ln -s /soft/apache-tomcat-9.0.26 /soft/tomcat
[root@web02 soft]# /soft/tomcat/bin/startup.sh
- 修改域名解析
② tomcat-->nfs
10.0.0.7 ---> 10.0.0.51
10.0.0.8 ---> 10.0.0.51
10.0.0.31
- 安装NFS
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u666 -g666 www
[root@nfs ~]# yum install nfs-utils -y
[root@nfs ~]# cat /etc/exports
/data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs ~]# mkdir /data/zrlog
[root@nfs ~]# systemctl restart nfs
- 找到图片资源 推送图片资源至NFS
[root@web01 ~]# scp -rp /code/zrlog/ROOT/attached/* root@172.16.1.31:/data/zrlog/
[root@nfs ~]# chown -R www.www /data/zrlog/ #重新授权
- 多节点挂载
# mount -t nfs 172.16.1.31:/data/zrlog/ /code/zrlog/ROOT/attached/
tomcat-->负载均衡
10.0.0.7 ---> 10.0.0.5
10.0.0.8 ---> 10.0.0.5
- 安装nginx[根据官方源码包进行安装]
yum install nginx -y
- 编辑配置文件(接入负载均衡)
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_zrlog.oldxu.com.conf
upstream zrlog {
server 172.16.1.7:8080;
server 172.16.1.8:8080;
}
server {
listen 80;
server_name zrlog.oldxu.com;
location / {
proxy_pass http://zrlog;
include proxy_params;
}
}
检查语法:nginx -t
Nginx+Tomcat集群全站Https
[root@lb01 conf.d]# cat proxy_zrlog.oldxu.com.conf
upstream zrlog {
server 172.16.1.7:8080;
server 172.16.1.8:8080;
}
server {
listen 443 ssl;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
server_name zrlog.oldxu.com;
location / {
proxy_pass http://zrlog;
include proxy_params;
}
}
server {
listen 80;
server_name zrlog.oldxu.com;
return 302 https://$http_host$request_uri;
}
- 重启nginx
[root@lb01 ~]# systemctl restart nginx
Tomcat配置虚拟主机
[root@web01~]# cat /soft/tomcat/conf/server.xml
<!--tomcat虚拟主机-->
<Host name="tomcat1.oldxu.com" appBase="/code1"
unpackWARs="true" autoDeploy="true">
<!--类似于nginx的location path是访问的路径 ->映射 docBase是真实的路径-->
<Context docBase="/code1/admin" path="/test" reloadable="true"/>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="tomcat1_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
PS:如果无法启动
1.替换配置文件: pkill java 然后在启动
2.配置文件写错
3.虚拟主机是添加,不要修改
4.context如果写了,一定要有对应的目录,不然整体就报错
5.查看日志/soft/tomcat/logs/catalina.out
三、项目演示
Tomcat部署博客项目zrlog
- 配置server.xml文件 ,新增在 engline
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
<!--zrlog站点-->
<Host name="zrlog.oldxu.com" appBase="/code/zrlog"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="zrlog_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
- 创建站点目录,上传zrlog的war包
[root@web01 ~]# mkdir /code/zrlog
[root@web01 ~]# cd /code/zrlog/
[root@web01 zrlog]# rz ROOT.war
PS:包名就命名为ROOT.war
- 重启Tomcat服务
[root@web01 zrlog]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh && tail -f /soft/tomcat/logs/catalina.out
- 配置域名劫持
- 在172.16.1.51的数据库上,创建一个zrlog的库,配置授权访问用户
[root@db01 ~]# mysql -uroot -pwyw.com
MariaDB [(none)]> create database zrlog charset utf8;
<---此前配置过all用户,可以复用
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'wyw.com';
Tomcat部署博客项目jpress
- 配置server.xml文件 ,新增在 engline
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
<!--jpress站点-->
<Host name="jpress.oldxu.com" appBase="/code/jpress"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="jpress_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
- 创建站点目录,上传jpress的war包
[root@web01 ~]# mkdir /code/jpress
[root@web01 ~]# cd /code/jpress/
[root@web01 jpress]# rz jpress.war
[root@web01 jpress]# mv jpress.war ROOT.war
PS:包名就命名为ROOT.war
- 重启Tomcat服务
[root@web01 jpress]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh && tail -f /soft/tomcat/logs/catalina.out
- 配置域名劫持
- 在172.16.1.51的数据库上,创建一个jpress的库,配置授权访问用户
[root@db01 ~]# mysql -uroot -pwyw.com
MariaDB [(none)]> create database jpress charset utf8;
<---此前配置过all用户,可以复用
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'wyw.com';
四、Tomcat配置基础认证
开启 Server Status Host Manager页面
- 配置conf/tomcat-users.xml
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="manager-gui"/>
- 如果访问还是403,是因为tomcat默认仅运行本地访问该管理页面,需要允许同网段主机访问
[root@web01 ~]# ll /soft/tomcat/webapps/manager/
[root@web01 ~]# ll /soft/tomcat/webapps/host-manager/
[root@es-web01 tomcat]# vim 项目目录下/META-INF/context.xml
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
#修改为
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />
- 启用zrlog的基础认证(Nginx的basic认证) ---> zrlog.oldxu.com/admin
server {
listen 80;
server_name zrlog.oldxu.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
}
location /admin {
auth_basic "closed site";
auth_basic_user_file conf/auth_conf;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
}
}
[root@es-web01 tomcat]# vim /code/zrlog/ROOT/WEB-INF/web.xml
<web-app>
...
<security-constraint>
<web-resource-collection>
<web-resource-name>zrlog</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>zrlog_role</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Default</realm-name>
</login-config>
...
</web-app>
#配置用户名密码,关联对应的角色(多个role不要使用相同用户)
[root@es-node1 tomcat]# vim /soft/tomcat/conf/tomcat-users.xml
<role rolename="zrlog_role"/>
<user username="tomcat" password="123456" roles="zrlog_role"/>
#重启tomcat
[root@web01 ~]# /soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh
五、多节点部署
① tomcat-->mysql
10.0.0.7 ---> 10.0.0.51
10.0.0.8 ---> 10.0.0.51
先在10.0.0.8安装java
- 安装jdk
[root@web02 ~]# yum install java -y
- 安装tomcat 部署代码 (scp)
在web01上操作
[root@web01 ~]# scp -rp /soft root@172.16.1.8:/
[root@web01 ~]# scp -rp /code/zrlog root@172.16.1.8:/code/
在web02上操作
[root@web02 soft]# rm -rf /soft/tomcat/
[root@web02 soft]# ln -s /soft/apache-tomcat-9.0.26 /soft/tomcat
[root@web02 soft]# /soft/tomcat/bin/startup.sh
- 修改域名解析
② tomcat-->nfs
10.0.0.7 ---> 10.0.0.51
10.0.0.8 ---> 10.0.0.51
10.0.0.31
- 安装NFS
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u666 -g666 www
[root@nfs ~]# yum install nfs-utils -y
[root@nfs ~]# cat /etc/exports
/data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs ~]# mkdir /data/zrlog
[root@nfs ~]# systemctl restart nfs
- 找到图片资源 推送图片资源至NFS
[root@web01 ~]# scp -rp /code/zrlog/ROOT/attached/* root@172.16.1.31:/data/zrlog/
[root@nfs ~]# chown -R www.www /data/zrlog/ #重新授权
- 多节点挂载
# mount -t nfs 172.16.1.31:/data/zrlog/ /code/zrlog/ROOT/attached/
tomcat-->负载均衡
10.0.0.7 ---> 10.0.0.5
10.0.0.8 ---> 10.0.0.5
- 安装nginx[根据官方源码包进行安装]
yum install nginx -y
- 编辑配置文件(接入负载均衡)
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_zrlog.oldxu.com.conf
upstream zrlog {
server 172.16.1.7:8080;
server 172.16.1.8:8080;
}
server {
listen 80;
server_name zrlog.oldxu.com;
location / {
proxy_pass http://zrlog;
include proxy_params;
}
}
检查语法:nginx -t
Nginx+Tomcat集群全站Https
[root@lb01 conf.d]# cat proxy_zrlog.oldxu.com.conf
upstream zrlog {
server 172.16.1.7:8080;
server 172.16.1.8:8080;
}
server {
listen 443 ssl;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
server_name zrlog.oldxu.com;
location / {
proxy_pass http://zrlog;
include proxy_params;
}
}
server {
listen 80;
server_name zrlog.oldxu.com;
return 302 https://$http_host$request_uri;
}
- 重启nginx
[root@lb01 ~]# systemctl restart nginx
- 域名解析