使用jk_module整合MyEclipse内置Tomcat到Apache、实现多域名、解决Cookie值丢失问题

JK
JK 本身有两个版本分别是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本 1。
注意JK的每个版本都对应一个apache版本。Jk下载可以直接到apache.org官网下载,有多种版本,适用于各种操作系统,地址如下:
http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/

本文以 win32/jk-1.2.28/mod_jk-1.2.28-httpd-2.2.3.so 为例

下载完JK的so模块后,放在${APACHE_HOME}\modules\mod_jk.so


Apache2.2 配置
打开配置文件:${APACHE_HOME}\conf\httpd.conf
在配置文件最后加入以下加载JK的内容:

#加载jk模块
LoadModule jk_module modules/mod_jk.so

#设定jk workers配置文件
JkWorkersFile conf/workers.properties

#jk log文件
JkLogFile logs/mod_jk.log

#jk log级别
JkLogLevel warn


#设置网站虚拟主机

#域名和映射
ServerName www.mywebsite.com
ServerAlias www.mywebsite.com

#网站根 (应该指向程序源代码的webRoot目录,这里的例子应用的webRoot目录就是应用根目录)
DocumentRoot "F:/workspace/MyEclipse7/mywebsite"

#主页面
DirectoryIndex index.jsp

#错误日志
ErrorLog logs/mywebsite_error_log.txt
#自定义访问日志
CustomLog logs/mywebsite_access_log.txt common

#jk mount映射文件
JkMountFile conf/mywebsite_uriworkermap.properties
#也可以在这里直接写映射关系,如:
#JkMount /*.jsp myworkerName



在上面的配置中,使用到两个配置文件,这两个文件就是JK的主要配置文件:
到 Tomcat 服务器的连接定义文件
conf/workers.properties
URI 映射文件,用来指定哪些 URL 由 Tomcat 处理
conf/mywebsite_uriworkermap.properties

在${APACHE_HOME}\conf\目录下,创建这两个文件。


JK配置
1.打开 ${APACHE_HOME}\conf\workers.properties 文件,写入以下内容:

worker.list=myeclipseTomcat, status

# list the workers by name

# localhost server 1
# ------------------------

worker.myeclipseTomcat.port=8009
worker.myeclipseTomcat.host=localhost
worker.myeclipseTomcat.type=ajp13

#status worker, listening jk's status
worker.status.type=status

上面内容中的worker.list指定了当前可用的两个worker:myeclipseTomcat和status;
worker.myeclipseTomcat.*配置的正是是myeclipse中内置的Tomcat。
worker.status配置了一个用来监控 JK 本身工作状况的模块。
这里可以用更复杂的配置来实现Tomcat分布式、以及负载均衡(load banlace),本文不作深入讨论。

注意:worker.myeclipseTomcat的设定不能简单的填写浏览器中可访问的host和端口;
如果配置完毕后出现JK无法连接到tomcat的情况,就需要参考Tomcat配置文件:
${TOMCAT_HOME}/conf/server.xml 中,关于Connector的配置信息。

以我这里的server.mxl配置为例,其中配置了两个Connector:


不难看出,88端口的Connector只面向http协议,而真正面向JK的是使用AJP13协议的8009这个端口。
所以在上面JK的worker配置内容中,port应该是8009,而不是通过浏览器可访问的88端口。


2.打开 ${APACHE_HOME}\conf\mywebsite_uriworkermap.properties 文件,写入以下内容:

/jkstatus=status

#following types will NOT be proccessed by tomcat
!/*.gif=myeclipseTomcat
!/*.jpg=myeclipseTomcat
!/*.png=myeclipseTomcat
!/*.css=myeclipseTomcat
!/*.js=myeclipseTomcat
!/*.htm=myeclipseTomcat
!/*.html=myeclipseTomcat
!/*.swf=myeclipseTomcat

#other types will be given to tomcat
/*=myeclipseTomcat

在以上内容中:
/jkstatus=status :配置了一个URL,随后访问http://www.mywebsite.com/jkstatus就可以查看到JK的运行状态。
!/*.gif=myeclipseTomcat :设定*.gif类型的文件直接由apache进行处理,不通过tomcat。(apache处理静态内容的效率比tomcat高很多)
/*=myeclipseTomcat :其他类型的请求都有tomcat进行处理。

以上配置可参考资料:http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html


MyEclipse的TOMCAT配置
MyEclipse安装后,内置的Tomcat默认是enable的。可以在”Servers“选项页看到。
内置Tomcat的默认根目录在:${WORKSPACE}\.metadata\.me_tcat\
${WORKSPACE}就是MyEclipse默认的Workspace目录。

打开${TOMCAT_HOME}\conf\server.xml文件,
小节中,加入以下内容:

这是一个虚拟主机设定,通过域名访问应用的时候tomcat会根据这里的设定去寻找这个主机的config文件。
而上面设定的主机的config文件在约定的目录:
${TOMCAT_HOME}\conf\Catalina\www.mywebsite.com\ROOT.xml

如果没有这个文件,创建对应的目录结构,然后在目录下面创建这个文件,
打开www.mywebsite.com\ROOT.xml,加入以下内容:


这行内容指定了www.mywebsite.com域名指向的网站目录,应该填写应用的webRoot目录(当前例子的webRoot目录就是应用根目录)
这部分的配置可参考资料:http://www.blogjava.net/sealyu/archive/2008/08/25/224326.html

配置完毕后,在MyEclipse的”Servers“选项页重启Tocmat服务器、重启Apache服务器。

如果这个域名的dns还未生效,就在 WINDOWS\system32\drivers\etc\hosts 文件中增加一条映射:
127.0.0.1 www.mywebsite.com

重启服务器后,如果服务器运行正常,就可以打开浏览器访问 www.mywebsite.com 测试了。

在使用JK后,程序向客户端写入的某些Cookie值丢失?虽然比较罕见,我就遇上了。
经过各种尝试,发现是因为我写入的Cookie内容中含有换行符号,将换行符号替换成其他字符以后,Cookie工作正常,特此记录备忘。

你可能感兴趣的:(服务器)