最近一直在弄tomcat,在处理几个擦屁股的项目/系统。源码编译、安装、配置、升级、迁移.....什么活都干,以本文记录次过程中的一些体会。
 
1、安装
 
1.1二进制包安装
1.1.1 JDK 安装
从sun官方网站下载jdk1.5.0 for linux,
解压后,移动到/usr/local/jdk下,将JAVA_HOME环境变量设置为/usr/local/jdk,然后将/usr/local/jdk/bin加入到PATH中, 并将JAVA_HOME和CLASSPATH变量写在/etc/profile里;
1.1.2 TOMCAT安装
从tomcat官方网站找到 ,下载之,解压,改名放在/usr/local下叫做tomcat,即路径为/usr/local/tomcat,设置环境TOMCAT_HOME为/usr/local/tomcat,写入/etc/profile中。
1.2 源码编译安装
为了修补http://tomcat.apache.org/security-5.html中tomcat5.5.27最近爆出的两个比较严重的漏洞
Important: Information Disclosure 
Important: Denial of Service 
需要打补丁,重新编译tomcat,步骤如下:
1.2.1 下载源码 
从tomcat官方网站下载 apache-tomcat-5.5.27-src.tar.gz文件,解压到目录apache-tomcat-5.5.27-src;
1.2.2 下载补丁
先从、 
 、
  三个地址将所有的java补丁包下载下来,按照补丁包说明放在apache-tomcat-5.5.27-src对应的子目录下,如目录不存在,手动建立。
1.2.3 安装ant
下载地址:
下载后解压放在/usr/local/ant下,并将/usr/local/ant/bin加到PATH变量中,
export PATH=$PATH:/usr/local/ant/bin
1.2.4 编译tomcat
进入到 apache-tomcat-5.5.27-src/build目录下,先修改build.properties.default中的version.build=26为27,
修改version=5.5.26为5.5.27,再查看BUILDING.txt中的编译步骤,大致步骤如下:
ant download
ant
在执行ant download时,编译程序会自动下载很多开发包到/usr/share/java下,这个路径由build.properties.default中base.path=/usr/share/java的参数决定的。
下载的包解压后大约将近200M,这段时间根据下载的速度有所不一样。还可能会遇到各种各样的错误,依照错误提示即可找到解决方法。我遇到的是eclipse-JDT-3.3.1.zip 找不到的错误,google了一下,发现这个文件的download url已经变了,难怪找不到,修改build.xml或者手动下载后继续ant download 即可。
编译完成后,进入build目录,既是生成的tomcat。
 
2 配置
 
2.1 基本配置、优化配置和安全配置
 
将刚才生成的build下所有的子目录和文件移动到/usr/local下,改名叫做/usr/local/tomcat。
 
2.1.1 精简tomcat
# 删除 webapps下面所有的文件;
rm –fr $CATALINA_HOME/webapps/*
# 删除server/webapps下所有文件;
rm –fr $CATALINA_HOME/server/webapps/*
#删除 host-manager.xml、manager.xml和admin.xml
rm -rf $CATALINA_HOME/conf/Catalina/localhost/*
#删除bin目录下一些文件,文件列表如下:
commons-launcher.jar
catalina.xml
launcher.properties
LauncherBootstrap.class
*-using-launcher*
 
#删除classes整个目录;
rm –rf $CATALINA_HOME/classes
 
#删除conf下的大多文件,只保留catalina.policy,catalina.properties,context.xml,logging.properties,server.xml, server-minimal.xml, tomcat-users.xml,web.xml;
 
#删除docs目录;
 rm –rf $CATALINA_HOME/docs
#删除tests目录;
 rm –rf $CATALINA_HOME/tests
2.1.2 修改日志配置
找到$CATALINA_HOME/conf下的logging.properties文件,将
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4admin.org.apache.juli.FileHandler, 5host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
修改为
handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
将.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
修改为.handlers = 1catalina.org.apache.juli.FileHandler
 
2.1.3 修改jvm和JAVA_OPTS参数
 
将/usr/java/jdk/jre/lib/i386/jvm.cfg修改成如下的内容:
-server KNOWN     #从第二行移到第一行
-client IF_SERVER_CLASS -server
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR
 
tomcat默认可以使用的内存为128MB,对生产系统来说太小了,需要调整,找到$CATALINA_HOME/bin/catalina.sh,在脚本的最前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
把这个两个参数值调大,具体大小可根据系统物理内存大小和应用所消耗的内存大小来设置
例如:JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,可以使用的最大内存为512MB
 
 
2.1.4修改Tomcat监听端口和连接数设置
在$CATALINA_HOME/conf/server.xml文件,
找到这一段
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
修改如下:
为:
    
           maxTreads="500" minSpareThreads="10" maxSpareThreads="50"
           acceptCount="50" connectionTimeout="60000"
           enableLookups="false" redirectPort="8443" protocol="AJP/1.3" 
           compression="on"    --启用传输压缩,取值on/off/force,默认值off  
           compressionMinSize="2048"  --输入流缓冲大小,默认值2048 bytes
           noCompressionUserAgents="gozilla, traviata" 
           compressableMimeType="text/html,text/xml"/>
  
2.1.5 修改web docs设置
在$CATALINA_HOME/conf/server.xml中找到
       xmlValidation="false" xmlNamespaceAware="false">
       xmlValidation="false" xmlNamespaceAware="false">
       
 
 
2.1.6 让tomcat记录客户端WEB访问日志
在$CATALINA_HOME/conf/server.xml,找到这么一段,去掉 注释,使之生效  
 
 
2.2 配置数据库连接池(mysql和oracle)
 
2.2.1 mysql连接池配置
在mysql的官方找到mysql的驱动jar包,把mysql-connector-java-5.1.8-bin.jar文件放到tomcat的common/lib下
 
修改配置文件
在$CATALINA_HOME/conf/context.xml的 
      
               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"  ---很重要,最好加上,否则如果程序无重连机制的话,在一些意外情况下断开数据库连接后会报错,可在tomcat的catalina.out里面见到报错信息。
              removeAbandoned="true"     
               removeAbandonedTimeout="60"   
               logAbandoned="true"/>    
removeAbandoned="true"        ----To configure a DBCP DataSource so that abandoned dB connections are removed and recycled.  (回收被遗弃/忘记释放的数据库连接到连接池中。默认false)
removeAbandonedTimeout="60"   ---Use the removeAbandonedTimeout attribute to set the number of seconds a dB connection has been idle before it is considered abandoned.   (数据库连接过多长时间不用将被视为被遗弃而收回连接池中,默认300)
logAbandoned="true"          ---The logAbandoned attribute can be set to true if you want DBCP to log a stack trace of the code which abandoned the dB connection resources. (将被遗弃的数据库连接的回收记入日志。默认false)
以上三参数对oracle同样适用。
 
---其中TestDB为连接池名字,username和password分别为访问db的用户名和密码,javatest为db的库名。
然后在web项目的web.xml中标记
    
      
      
      
      
  
 
2.2.2 oracle连接池配置
在Oracle官方网站找到Oracle的驱动jar包,把ojdb14.jar包放到tomcat的common/lib下
 
找到$CATALINA_HOME/conf/context.xml,在其中的
 
              url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
              username="scott" password="tiger" maxActive="20" maxIdle="10"
              maxWait="-1"/> 
--myoracle
 
在web项目的web.xml中标记
 
 
 
 
 
 
 
3 整合apache
3.1 安装apache
apache版本是2.0.59
tar –zxvf httpd-2.0.59.tar.gz
cd httpd-2.0.59
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all  --enable-rule=SHARED_CORE --enable-so --enable-rewrite
make 
make install
3.2 下载mod_jk
从官方网站处下到符合自己平台和apache版本的mod_jk,我下的是i586/mod_jk-1.2.28-httpd-2.0.X.so,改名叫做mod_jk.so放在/usr/local/apache2/modules下。
3.3 配置mod_jk和works.properties
3.3.1 修改apache的httpd.conf文件,在最后里面添加这么一段
LoadModule jk_module module/mod_jk.so
JkWorkersFile "/usr/local/tomcat/conf/workers.properties"
JkLogFile "/usr/local/apache2/logs/mod_jk.log"
JkShmFile "/usr/local/apache2/logs/mod_jk.shm"
JkLogLevel info
JkLogStampformat "[%a %b %d %H:%M:%S %Y] "
JkMount /servlet/* ajp13
JkMount /*.servlet ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
JkMount /*.action ajp13
3.3.2 修改/usr/local/tomcat/conf/workers.properties文件
方法一:
修改workers.properties文件,主要修改以下两个参数:
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java/jdk1.5.0_18
注释掉如下几行tomcat5.5版本已废弃的参数:
worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar
worker.inprocess.cmd_line=start
worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)lib$(ps)i386$(ps)classic$(ps)libjvm.so
worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stderr
其它的参数可酌情修改,比如去掉ajp12和lb部分的内容。
方法二:
将workers.properties改名为workers.properties.old,将workers.properties.minimal改名为workers.properties,将其中内容修改为:
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java/jdk1.5.0_18
ps=/
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
