Linux 笔记 - 第二十四章 配置 Tomcat
一、前言
Tomcat 是 Apache 软件基金会(Apache Software Foundation)Jakarta 项目中的核心项目,由 Apache、Sun 和其他一些公司及个人共同开发。使用 Java 语言编写的 Web 应用可以用 Tomcat + JDK 来运行。
Tomcat 是一个中间件,真正的起作用的是解析 Java 脚本的 JDK。JDK(Java Development Kit)是整个 Java 的核心,它包含了 Java 的运行环境和一堆与 Java 相关的工具及 Java 基础库。
主流的 JDK 是 Sun 公司(已经被 Oracle 公司收购)发布的 JDK,IBM 公司也发布了 JDK,在 CentOS 上可以使用 yum 命令安装 openjdk。
OpenJDK 原是 Sun Microsystems 公司为 Java 平台构建的 Java 开发环境(JDK)的开源版本,完全自由,开放源码。Sun Microsystems 公司在 2006 年的 JavaOne 大会上称将对 Java 开放源代码,于 2009 年 4 月 15 日正式发布 OpenJDK。甲骨文在 2010 年收购Sun Microsystem 之后接管了这个项目。Oracle/Sun JDK 里面包含的 JVM 是 HotSpotVM,HotSpot VM 只有非常非常少量的功能没有在 OpenJDK 里,那部分在 Oracle 内部的代码库里。这些私有部分都不涉及 JVM 的核心功能。所以说,Oracle/Sun JDK 与 OpenJDK 其实使用的是同一个代码库。从一个 Oracle 内部员工的角度来看,当他要构建 OracleJDK 时,他同样需要先从 http://hg.openjdk.java.net 签出 OpenJDK,然后从 Oracle 内部的代码库签出私有的部分,放在 OpenJDK 代码下的一个特定目录里,然后构建。值得注意的是,Oracle JDK 只发布二进制安装包,而 OpenJDK 只发布源码。
二、安装 JDK
JDK从1.5 版本开始,在官方的正式文档与宣传资料中已经不再使用类似 "JDK1.5" 的名称,只有程序员内部使用的开发版本号才继续沿用 1.5,1.6,1.7 ……的版本号,而且公开版本号则改为 JDK5,JDK6,JDK7……。
JDK 所有版本下载页面为:https://www.oracle.com/technetwork/java/javase/archive-139210.html,找到 Java SE 7,Accept License Agreement,复制下载地址:https://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz,但是不能使用 wget 下载,因为会失败,可以复制此下载地址用浏览器下载或迅雷下载。然后上传到 Linux 的 /usr/local/src 中,如下:
[root@masternode ~]# cd /usr/local/src [root@masternode src]# du -sh jdk-7u80-linux-x64.tar.gz 147M jdk-7u80-linux-x64.tar.gz [root@masternode src]# tar zxf jdk-7u80-linux-x64.tar.gz [root@masternode src]# mv jdk1.7.0_80 /usr/local/jdk1.7
编辑 /etc/profile 配置文件,在下面添加 JDK 环境变量,如下:
[root@masternode src]# vim /etc/profile ...... #Java export JAVA_HOME=/usr/local/jdk1.7 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH [root@masternode src]# source /etc/profile
分别运行 java,javac 可以检测 JDK 是否已经安装成功,查看 JDK 版本号,如下:
[root@masternode src]# javac ...... [root@masternode src]# java ...... [root@masternode src]# java -version java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
可以正常显示 JDK 版本信息,说明安装成功。
三、安装 Tomcat
Tomcat 所有版本下载页面为:https://archive.apache.org/dist/tomcat/,找到 tomcat-7 的 二进制 bin 包下载地址:https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.96/bin/apache-tomcat-7.0.96.tar.gz,使用 wget 下载,如下:
[root@masternode src]# wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.96/bin/apache-tomcat-7.0.96.tar.gz [root@masternode src]# tar zxf apache-tomcat-7.0.96.tar.gz [root@masternode src]# mv apache-tomcat-7.0.96 /usr/local/tomcat7 [root@masternode src]# ls -l /usr/local/tomcat7 total 132 drwxr-xr-x 2 root root 4096 Oct 19 22:26 bin -rw-r--r-- 1 root root 18099 Jul 24 21:05 BUILDING.txt drwxr-xr-x 2 root root 158 Jul 24 21:05 conf -rw-r--r-- 1 root root 6090 Jul 24 21:05 CONTRIBUTING.md drwxr-xr-x 2 root root 4096 Oct 19 22:26 lib -rw-r--r-- 1 root root 56846 Jul 24 21:05 LICENSE drwxr-xr-x 2 root root 6 Jul 24 21:00 logs -rw-r--r-- 1 root root 1281 Jul 24 21:05 NOTICE -rw-r--r-- 1 root root 3255 Jul 24 21:05 README.md -rw-r--r-- 1 root root 9363 Jul 24 21:05 RELEASE-NOTES -rw-r--r-- 1 root root 16978 Jul 24 21:05 RUNNING.txt drwxr-xr-x 2 root root 30 Oct 19 22:26 temp drwxr-xr-x 7 root root 81 Jul 24 21:03 webapps drwxr-xr-x 2 root root 6 Jul 24 21:00 work
如果是 Windows 系统,启动和关闭 tomcat 的脚本如下:
/usr/local/tomcat7/bin/startup.bat
/usr/local/tomcat7/bin/shutdown.bat
如果是 Linux 系统,启动和关闭 tomcat 的脚本如下:
/usr/local/tomcat7/bin/startup.sh /usr/local/tomcat7/bin/shutdown.sh
启动 tomcat 并检查进程和端口,如下:
[root@masternode src]# /usr/local/tomcat7/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat7 Using CATALINA_HOME: /usr/local/tomcat7 Using CATALINA_TMPDIR: /usr/local/tomcat7/temp Using JRE_HOME: /usr/local/jdk1.7 Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar Tomcat started. [root@masternode src]# ps aux |grep tomcat root 8451 11.3 6.5 1104748 65668 pts/0 Sl 22:35 0:03 /usr/local/jdk1.7/bin/java -Djava.util.logging.config.file=/usr/local/tomca 7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat7 -Dcatalina.home=/usr/local/tomcat7 -Djava.io.tmpdir=/usr/local/tomcat7/temp org.apache.catalina.startup.Bootstrap start root 8491 0.0 0.0 112708 976 pts/0 S+ 22:35 0:00 grep --color=auto tomcat [root@masternode src]# netstat -ltnp | grep java tcp6 0 0 :::8009 :::* LISTEN 8451/java tcp6 0 0 :::8080 :::* LISTEN 8451/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8451/java
tomcat 的 java 进程 共监听了三个端口,分别是 8080 端口提供 Web 服务,8005 是管理端口,8009 是第三方服务调用端口,可以在 /usr/local/tomcat7/conf/server.xml 中看到。
用浏览器访问:http://192.168.150.140:8080,默认访问的是 /usr/local/tomcat7/webapps 中的 ROOT 项目,如下:
可以看到 tomcat 的首页显示正常。
四、Tomcat 虚拟主机
Apache 和 Nginx 都属于 Web Server,都有虚拟主机配置文件,而 Tomcat 同样有虚拟主机配置文件 /usr/local/tomcat7/conf/server.xml。何为 "虚拟主机"?一台物理机上搭建多个 web 站点,每个 web 站点独立运行,互不干扰,这些站点就是 "虚拟主机"。虚拟主机的实现方式通常有两种,即基于域名的虚拟主机(最常用)和基于端口的虚拟主机。
4.1 基于域名的虚拟主机
这种方式最常见,多个域名解析到同一个 IP 地址,在 Web 服务器里添加多个站点,每个站点设定一个域名。HTTP 协议请求里包含了域名信息,当 Web 服务器收到访问请求时,就可以根据不同的主机名来访问不同的网站。如下:
<Host name="www.moonxy.com" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/data/www/moonxy" path="" reloadable="true" debug="0" crossContext="true"/> </Host> <Host name="www.amplinux.com" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="/data/www/amplinux" path="" reloadable="true" debug="0" crossContext="true"/> </Host>
<Host> 和 </Host> 之间是虚拟主机配置部分,name 定义域名,appBase 定义应用的目的,docBase 用来定义网站文件的存放路径,如果不定义,默认是在 appBase/ROOT 目录下,定义 docBase 后就以该目录为主,其中 appBase 和 docBase 可以一致。
4.2 基于端口的虚拟主机
一个 IP 地址,通过不同的端口实现不同网站的访问。如下:
<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"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="www.moonxy.com" appBase="/data/www/moonxy" 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> <Service name="Catalina2"> <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina2" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="www.amlinux.com" appBase="/data/www/amlinux" 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>
分别配置了 8080 和 8090 端口,即http://www.moonxy.com:8080/ 和 http://www.amlinux.com:8090/。
4.3 Tomcat 日志
tomcat 对应日志的配置文件:tomcat 目录下的 /conf/logging.properties,日志目录为 /usr/local/tomcat/logs。
tomcat 的日志等级有:日志输出级别:SEVERE (最高级别) > WARNING > INFO > CONFIG > FINE > FINER(精心) > FINEST (所有内容,最低级别)
tomcat 有五类日志 :catalina、localhost、manager、admin、host-manager。
catalina.out 即标准输出和标准出错,所有输出到这两个位置的都会进入 catalina.out,这里包含 tomcat 运行自己输出的日志以及应用里向 console 输出的日志。默认这个日志文件是不会进行自动切割的,我们需要借助其他工具进行切割(注意:catalina.out 文件如果过大会影响系统性能)。
catalina.{yyyy-MM-dd}.log 是 tomcat 自己运行的一些日志,这些日志还会输出到 catalina.out,但是应用向 console 输出的日志不会输出到 catalina.{yyyy-MM-dd}.log,它是 tomcat 的启动和暂停时的运行日志,注意,它和 catalina.out 是里面的内容是不一样的。
localhost.{yyyy-MM-dd}.log 是默认虚拟主机错误日志,应用初始化(listener,filter,servlet)未处理的异常最后被 tomcat 捕获而输出的日志,它也是包含 tomcat 的启动和暂停时的运行日志,但它没有 catalina.2018-09-19.log 日志全。它只是记录了部分日志。
localhost_access_log.2019-09-19.txt 是访问 tomcat 的访问日志,请求时间和资源,状态码都有记录。
host-manager.2019-09-19.log 是 tomcat 虚拟主机的管理日志。
manager.2019-09-19.log 是 tomcat 的 manager 管理相关的日志文件。