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 &quot;%r&quot; %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 &quot;%r&quot; %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 管理相关的日志文件。

posted on 2019-10-20 23:09  沐小悠  阅读(311)  评论(0编辑  收藏  举报