tomcat/Web容器-tomcat.md
2025-03-15 12:28:32 +08:00

289 lines
8.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<h2><center>Tomcat</center></h2>
------
## 一Tomcat 简介
### 1. 简介
![](http://182.92.143.66:40072/directlink/img/tomcat/image-202503150001.png)
Tomcat是Apache软件基金会Apache Software Foundation的Jakarta 项目中的一个核心项目
Tomcat服务器是一个免费的开放源代码的Web应用服务器属于轻量级应用服务器
Tomcat是WEB容器/WEB中间件
Tomcat官网https://tomcat.apache.org/
### 2. 端口
- Tomcat自身服务的端口8005
- Tomcat和其他应用通信的端口8009
- Tomcat给客户端浏览器访问页面使用的端口8080
### 3. 运行环境
JDK是 Java 语言的软件开发工具包
JDK是整个java开发的核心它包含了JAVA的运行环境JVM+Java系统类库和JAVA工具
Tomcat运行需要JDK
## 二Tomcat 安装
### 1. 下载
访问官方网站:[Apache Tomcat® - Welcome!](https://tomcat.apache.org/)
![](http://182.92.143.66:40072/directlink/img/tomcat/image-202503150002.png)
![](http://182.92.143.66:40072/directlink/img/tomcat/image-202503150003.png)
![](http://182.92.143.66:40072/directlink/img/tomcat/image-202503150004.png)
![](http://182.92.143.66:40072/directlink/img/tomcat/image-202503150005.png)
![](http://182.92.143.66:40072/directlink/img/tomcat/image-202503150006.png)
```bash
[root@tomcat ~]# wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.59/bin/apache-tomcat-7.0.59.tar.gz
```
### 2. 安装
```bash
[root@tomcat ~]# tar xf apache-tomcat-7.0.59.tar.gz -C /usr/local/
[root@tomcat ~]# tar xf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@tomcat ~]# ln -s /usr/local/jdk1.8.0_211 /usr/local/java
[root@tomcat ~]# ln -s /usr/local/apache-tomcat-7.0.59 /usr/local/tomcat
```
### 3. 环境变量
```bash
[root@tomcat ~]# vim /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
[root@tomcat ~]# source /etc/profile
```
### 4. 检查
```bash
[root@tomcat ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
```
### 5. 启动 Tomcat
```bash
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh
```
### 6. 管理方式
```shell
启动tomcat的方法
1.直接执行/usr/local/tomcat/bin/startup.sh
2.直接执行/usr/local/tomcat/bin/catalina.sh start
关闭tomcat的方法
1.直接执行/usr/local/tomcat/bin/shutdown.sh
2.直接执行/usr/local/tomcat/bin/catalina.sh stop
```
### 7. 检测
```bash
[root@tomcat ~]# netstat -tnlp | grep java
tcp6 0 0 :::8080 :::* LISTEN 2838/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2838/java
tcp6 0 0 :::8009 :::* LISTEN 2838/java
```
### 8. 测试
IP+端口访问
### 9. Tomcat 目录
Tomcat主目录介绍
```bash
[root@tomcat ~]# cd /usr/local/tomcat/
[root@tomcat tomcat]# tree -L 1
.
├── bin # 存放tomcat的管理脚本(二进制文件)
├── conf # tomcat的配置文件server.xml
├── lib # web应用调用的jar包存放路径
├── LICENSE
├── logs # tomcat日志存放目录
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp # 存放临时文件
├── webapps # 默认网站发布目录
└── work # 存放编译生产的.java与.class文件
7 directories, 4 files
```
Webapps目录介绍
```bash
[root@tomcat tomcat]# cd webapps/
[root@tomcat webapps]# tree -L 1
.
├── docs # tomcat的帮助文档
├── examples # web应用实例
├── host-manager # 主机管理
├── manager # 管理
└── ROOT # 默认站点根目录
5 directories, 0 files
```
Tomcat配置文件目录介绍
```bash
[root@tomcat webapps]# cd ../conf/
[root@tomcat conf]# tree -L 1
.
├── Catalina
├── catalina.policy
├── catalina.properties
├── context.xml
├── logging.properties
├── server.xml # tomcat 主配置文件
├── tomcat-users.xml # tomcat 管理用户配置文件
└── web.xml
1 directory, 7 files
```
## 三Tomcat 扩展
### 1. Tomcat 配置文件
- server.xml: Tomcat的主配置文件包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息
- web.xml遵循Servlet规范标准的配置文件用于配置servlet并为所有的Web应用程序提供包括MIME映射等默认配置信息
- tomcat-user.xmlRealm认证时用到的相关角色、用户和密码等信息
- catalina.policyJava相关的安全策略配置文件在系统资源级别上提供访问控制的能力
- catalina.propertiesTomcat内部package的定义及访问相关的控制也包括对通过类装载器装载的内容的控制
- logging.properties: Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志
- context.xml所有host的默认配置信息
### 2. Tomcat 管理
```bash
1.编辑一个文件tomcat
[root@tomcat ~]# vim tomcat
#!/bin/bash
bash /usr/local/tomcat/bin/catalina.sh $1
2.给tomcat文件加执行权限
[root@tomcat ~]# chmod a+x tomcat
3.把tomcat放到/usr/bin目录下
[root@tomcat ~]# mv tomcat /usr/bin
4.使用
[root@tomcat ~]# tomcat stop 停止
[root@tomcat ~]# tomcat start 启动
```
## 四Tomcat 日志管理
### 1. 日志
```bash
[root@tomcat ~]# cd /usr/local/tomcat/conf/
[root@tomcat conf]# vim server.xml
<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" />
```
日志格式参数文件https://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Access_Logging
### 2. JVM 参数优化
```bash
[root@tomcat ~]# cd /usr/local/tomcat/bin/
[root@tomcat bin]# vim catalina.sh
JAVA_OPTS="$JAVA_OPTS -Xms4096m -Xmx4096m -XX:PermSize=1024m -XX:MaxPermSize=2048m"
```
设置初始堆、非堆内存大小以及年轻代
```shell
-Xms50m -Xmx200m -XX:PermSize=30m -XX:MaxPermSize=60m
-Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义)
-XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式)
-XX:+PrintGCDetails (打印垃圾回收详情)
-XX:PermSize设置永久代(perm gen)初始值。默认值为物理内存的1/64。
-XX:MaxPermSize设置持久代最大值。物理内存的1/4。
-Xms初始堆大小默认为物理内存的1/64(<1GB)
-Xmx最大堆大小
-Xmn新生代的内存空间大小
```
### 3. gc 日志
阅读GC日志我们可以了解Java虚拟机内存分配与回收策略开发使用
```bash
[root@tomcat ~]# cd /usr/local/tomcat/bin/
[root@tomcat bin]# vim catalina.sh
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-Xloggc:/var/log/tomcat/gc.log \
-XX:+UseGCLogFileRotation \
-XX:NumberOfGCLogFiles=10 \
-XX:GCLogFileSize=100M"
```
参数说明:
- -XX:+PrintGCDetails打印详细的GC信息。
- -XX:+PrintGCDateStamps添加日期时间戳。
- -Xloggc:/var/log/tomcat/gc.log指定GC日志文件路径。
- -XX:+UseGCLogFileRotation启用日志轮转。
- -XX:NumberOfGCLogFiles=10保留最多10个日志文件。
- -XX:GCLogFileSize=100M"每个日志文件最大100MB。
## 五Tomcat 负载均衡
### Nginx 配置
```bash
[root@tomcat ~]# vim /usr/local/nginx/conf/nginx.conf
这个地方是 地址池,这里包含了后端服务器的地址和端口,这里的名字随便启。
http {
upstream tomcat_pool {
#ip_hash; 最大失败次数 失败超时时间
server 192.168.122.105:8081 weight=1 max_fails=2 fail_timeout=2;
server 192.168.122.105:8082 weight=1 max_fails=2 fail_timeout=2;
server 192.168.122.105:8083 weight=1 max_fails=2 fail_timeout=2;
server 192.168.122.105:8084 weight=1 max_fails=2 fail_timeout=2;
}
负载均衡的算法: RR round robin session ip_hash 是常用的负载均衡的算法
server {
location / {
proxy_pass http://tomcat_pool;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
```