apache2 和 tomcat5.5 集成及虚拟主机配置

想起以前 tomcat 还没配过虚拟主机,便想试试,就随手集成了 apache2。把配置过程记录在这里。

安装 apache2、JDK、tomcat 就不写了,查看文档吧。

apache2 要整合 tomcat 需要用到 mod_jk。Ubuntu 下安装 mod_jk 很简单:

$ sudo apt-get install libapache2-mod-jk

可以查看一下这个包安装后产生的配置文件:

$ dpkg -L libapache2-mod-jk
1
2
3
4
5
6
7
8
......
/etc
/etc/libapache2-mod-jk
/etc/libapache2-mod-jk/workers.properties
/etc/apache2
/etc/apache2/mods-available
/etc/apache2/mods-available/jk.load
......

配置 workers.properties 文件,修改其中的 workers.tomcat_home 和 workers.java_home 字段,改成正确的路径。例如,我的:

1
2
workers.tomcat_home = /home/belltoy/dev/apache-tomcat-5.5.25/
workers.java_home = /opt/jdk1.6.0_05/

workers.properties 文件默认已经配置了一个 worker,名字是 ajp13_worker,如下:

1
2
3
4
5
6
7
8
worker.list=ajp13_worker
worker.ajp13_worker.port=8009       #tomcat默认开了8009商品。根据实际情况适当修改。
worker.ajp13_worker.host=localhost  #tomcat服务器所在的主机
worker.ajp13_worker.type=ajp13      #apache2 连接 tomcat 的协议,默认为 ajp13
worker.ajp13_worker.lbfactor=1      #负载均衡选项。
 
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13_worker

在 /etc/apache2/mods-available 目录下增加一个文件 jk.conf,内容如下:

1
2
3
4
5
6
JkWorkersFile /etc/libapache2-mod-jk/workers.properties  #指定 mod_jk 的workers.properties 文件的位置
JkLogFile /var/log/apache2/mod_jk.log  # 指定mod_jk的日志文件位置
JkLogLevel info   # 指定od_jk的日志级别
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"  # 指定od_jk的日志格式
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories  # 指定od_jk的选项
JkRequestLogFormat "%w %V %T" # 指定od_jk的请求日志格式,也是写在JkLogFile文件里

然后先禁用 mod_jk,再重新启用,这样 Ubuntu 自带的 apache2 工具会自动将 jk.conf 也放到启用目录 /etc/apache2/mods-enabled/ 下。命令:

$ sudo a2dismod jk
$ sudo a2enmod jk

假设虚拟主机名取为 jspproj.belltoy。

在 /etc/hosts 文件中添加本地主机名:

127.0.0.1        jspproj.belltoy

添加 apache2 下的虚拟主机配置

在 /etc/apache2/sites-available 目录下添加一个虚拟主机配置。配置如下:

文件名可以随便取,如:jspproj

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<VirtualHost *>
    # 匹配的URL将转给 tomcat 处理
    JkMount /servlet/* ajp13_worker
    JkMount /*.jsp ajp13_worker
    JkMount /*.do ajp13_worker
    JkMount /* ajp13_worker
 
    ServerAdmin admin@localhost
    ServerName  jspproj.belltoy
    CustomLog   /var/log/apache2/jspproj.belltoy-access.log combined
    DocumentRoot /home/belltoy/www/jspproj/
    <Directory /home/belltoy/www/jspproj/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
 
</VirtualHost>

启用jspproj:

$ sudo a2ensite jspproj

重新启动 apache2:

$ sudo /etc/init.d/apache2 restart

配置 tomcat5.5

在 tomcat 安装目录的 conf/server.xml 文件中 <Engine> 里增加一个虚拟主机的配置:

1
2
3
4
5
6
      <Host name="jspproj.belltoy" appBase="/home/belltoy/www/jspproj/" 
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
            <Context path="" docBase="/home/belltoy/www/jspproj/"
                reloadable="true" crossContext="true" />
      </Host>

启动 tomcat,在浏览器访问 http://jspproj.belltoy/ 就可以访问 /home/belltoy/www/jspproj/ 目录下的 jsp 应用了。

在jsp的概念中,一个主机<Host>下可以有多个 webapp,默认的 webapp 就是 path 为空的 <Context> 指定的目录。如果这里不指定 path 为空的<Context>,tomcat默认会用 appBase 指定的目录下的 ROOT 目录作为默认的 webapp。

相关文章

Tags: , , , | Category: Web

By belltoy On 11月 26th, 2009 12:51 上午 | delicious 收藏 | Twitter 分享

一条评论

  1. 赚钱网 说:

    欣赏了,很好,也看下我的好不。

    回复

添加评论

(若看不到验证码,请点击此处。)