Tomcat

1. tomcat单机多实例部署

单Tomcat部署多实例有以下优点:

  • 所有项目只应用单一Tomcat,对于项目启动、Tomcat升级可一次性解决,不需要更改过多配置
  • 单一Tomcat日志存储不再是问题,可统一跟踪及处理
  • 多实例无依赖,可做到单实例下线或维护,不影响其它实例运行,方便管理
  • 对多实例间单例不会造成任何影响
  • 可实现自定义单一实例热加载热部署,不会对其它实例造成影响

这里需要说明的两个变量CATALINA_HOMECATALINA_BASE CATALINA_HOME:即指向Tomcat安装路径的系统变量 CATALINA_BASE:即指向活跃配置路径的系统变量通过设置这两个变量,就可以将tomcat的安装目录和工作目录分离,从而实现tomcat多实例的部署。

Tomcat官方文档指出,CATALINA_HOME路径的路径下只需要包含bin和lib目录,这也就是支持tomcat软件运行的目录,而CATALINA_BASE设置的路径可以包括上述所有目录,不过其中bin和lib目录并不是必需的,缺省时会使用CATALINA_HOME中的bin和conf. 如此,我们就可以使用一个tomcat安装目录部署多个tomcat实例,这样的好处在于方便升级,就可以在不影响tomcat实例的前提下,替换掉CATALINA_HOME指定的tomcat安装目录。

在/etc/profile最后加入CATALINA_HOME环境变量

export CATALINA_HOME=/home/q/tomcat

将tomcat主目录的conf、logs、webapp、temp、work目录拷贝到新的目录下作为一份新的tomcat实例,注意修改conf/server.xml文件中的各个端口号防止端口占用问题

目录 作用
bin 主要存放脚本文件,例如比较常用的windows和linux系统中启动和关闭脚本
conf 主要存放配置文件,其中最重要的两个配置文件是server.xml和web.xml
lib 主要存放tomcat运行所依赖的包
logs 主要存放运行时产生的日志文件,例如catalina.{date}.log等
temp 存放tomcat运行时产生的临时文件,例如开启了hibernate缓存的应用程序,会在该目录下生成一些文件
webapps 部署web应用程序的默认目录
work 主要存放由JSP文件生成的servlet(java文件以及最终编译生成的class文件)

编写启动脚本和关闭脚本,启动多实例时注意修改CATALINA_BASE为指定实例的目录

#! /bin/sh
export CATALINA_BASE=/home/q/tomcat/tomcat1
sh "$CATALINA_HOME"/bin/startup.sh
#! /bin/sh
export CATALINA_BASE=/home/q/tomcat/tomcat1
sh "$CATALINA_HOME"/bin/shutdown.sh

接下来就可以新建几个实例出来,启动多实例了,这样很多人用同一台服务器时可以各自跑各自的没什么影响

2. tomcat配置

2.1 账号管理

添加tomcat运行账号

groupadd tomcat
useradd -g tomcat tomcat
cat /etc/passwd | grep tomcat

配置启动账号 在$CATALINA_BASE/startenv.sh里面export环境变量:

export TOMCAT_USER=tomcat

同时需要修改$CATALINA_HOME/bin/startup.sh

修改前

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

修改后

if [ -z "$TOMCAT_USER" ]; then
    exec "$PRGDIR"/"$EXECUTABLE" start "$@"
else
    exec su $TOMCAT_USER -c "$PRGDIR/$EXECUTABLE start $@"
fi

使用jsvc来启动tomcat

在jsvc配置文件里面指定参数 -u tomcat

2.2 配置default

2.2.1 删除默认文件

$CATALINA_BASE/webapps/docs  
$CATALINA_BASE/webapps/examples  
$CATALINA_BASE/webapps/host-manager  
$CATALINA_BASE/webapps/manager

$CATALINA_BASE/conf/tomcat-users.xml

2.2.2 禁止列目录

配置$CATALINA_BASE/conf/web.xml文件,防止直接访问目录时由于找不到默认主页而列出目录下所有文件

<servlet>
        ......
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        ......
</servlet>

2.2.3 日志记录

必须打开access log记录功能,按小时或按天记录。prefix/fileDateFormat/pattern可自定义,但必须记录关键信息,例如:源IP,Host、时间、请求、状态码、数据大小、UA等。注意:如果前端是NG做反向代理,默认的pattern="combined"和pattern="common"不能记录用户的真实IP,必须自定义pattern,记录客户端真实IP(X-Real-IP)。access log应该定期压缩上传至中央日志服务器保存。$CATALINA_BASE/conf/server.xml配置示例:

<Valve className="org.apache.catalina.valves.AccessLogValve"
    directory="logs"  prefix="access" suffix=".log"
    fileDateFormat="yyyy-MM-dd-HH"
    pattern="%a %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; &quot; %{X-Real-IP}i" 
    resolveHosts="false"/>

2.2.4 禁止使用AJP

配置$CATALINA_BASE/conf/server.xml文件,注释或删除如下部分。

注释前

<Connector port="*" maxThreads="*" enableLookups="false" redirectPort="*" protocol="AJP/**" />

注释后

<!--
<Connector port="*" maxThreads="*" enableLookups="false" redirectPort="*" protocol="AJP/**" />
-->

2.2.5 目录权限

NOTE: tomcat启动用户对WEB目录下所有文件及子目录应无写权限

chown -R root:root /home/q/www/xxx/webapps && chmod -R 0755 /home/q/www/xxx/webapps

results matching ""

    No results matching ""