1. Apache 和 Tomcat 的联系
Apache 主要用于支持静态网页, 而 Tomcat 主要用于支持动态网页。 比如运行 WortPress 使用 apahce, 运行 WebApollo 这样的 java 网页则使用 Tomcat。Apache 是 web 服务器, Tomcat 是应用(java)服务器。 Tomcat 可以认为是 apache 的扩展,但是可以独立于 apache 运行。
由于学校只开放了 80 端口,而 Tomcat 运行在 8080 端口。为了能让 WebApollo 在 80 端口被访问,因此需要将 java 请求通过 apache 转发给 tomcat 处理。
2. 安装 Apache 和 Tomcat
整合 Apache 和 Tomcat 需要安装 jakarta-tomcat-connectors
使用 yum 安装 Apache $ sudo yum install httpd httpd-devel 安装 jakarta-tomcat-connectors $ wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz $ tar zxf tomcat-connectors-1.2.40-src.tar.gz $ cd tomcat-connectors-1.2.40-src/native/ $ ./configure --with-apxs=/usr/sbin/apxs $ make 安装 Tomcat,直接下载二进制包解压缩即可使用
3. 配置 JK 以整合 Apache 和 Tomcat
首先,在 /etc/http/conf.d/ 目录下建立文件 mod_jk.conf,内容如下:
# 载入 jk 模块 LoadModule jk_module modules/mod_jk.so # 指出mod_jk模块工作所需要的工作文件workers.properties的位置 JkWorkersFile /etc/httpd/conf/workers.properties JkMountFile /etc/httpd/conf/uriworkermap.properties JkLogFile /etc/httpd/logs/mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories JkRequestLogFormat "%w %V %T" # 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理 JkMount /servlet/* worker1 JkMount /*.jsp worker1
将以下内容写入 /etc/http/conf/workers.properties :
# Defining a worker named worker1 and of type ajp13 # 创建名为 worker1 的 worker worker.list=worker1 # Set properties for worker1 # work1 使用ajp13协议与tomcat 进程通讯 worker.worker1.type=ajp13 # 监听ajp13请求的的tomcat worker主机地址 worker.worker1.host=localhost # 默认情况下tomcat在ajp13协议中使用的端口为8009 worker.worker1.port=8009 worker.worker1.lbfactor=50 worker.worker1.cachesize=10 worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300
将以下内容写入 /etc/httpd/conf/uriworkermap.properties :
/*=worker1 !/*.jpg=worker1 !/*.gif=worker1 !/*.png=worker1 !/*.bmp=worker1 !/*.html=worker1 !/*.htm=worker1 !/*.swf=worker1 !/*.css= worker1 !/*.js= worker1
上述内容表示: ‘/’表示网页中的相对路径; /*=worker1 表示将‘/’目录下所有的请求都交给 worker1 (workers.properties 文件中指定的)来处理;模块会首先在‘/’目录过滤掉所有图片、flash、js文件、css文件和静态网页,将剩下的文件类型自己全部处理。
4. 配置 Apache 和 Tomcat 展示指定的目录
对 Tomcat 中的 webApp 目录进行展示。
首选修改 Apache 的 /etc/httpd/conf.d/httpd.conf 文件
Alias /tomcat "/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps" <Directory "/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps"> Options Includes FollowSymLinks AllowOverride None Order deny,allow Allow from all </Directory>
再修改 /opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/conf/server.xml 文件
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
errorReportValveClass="org.bbop.apollo.web.ErrorReportValve">
<Context path="/tomcat" docBase="/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps/" debug="0" reloadable="true" crossContext="true"/>
...
</Host>
以上修改都表示将目录 /opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps/ 展示到网页中的 /tomcat 目录下。
5. 使用代理进行整合
此外,还有两种非常简易的方法进行整合。
默认情况下,Tomcat 对外开启了 8080 端口,以 HTTP/1.1 协议运行; 同时,也开启了 8009 端口,以 AJP/1.3 协议运行。这两种协议可以同时生效,也可以按需要仅保留一个即可。
因此,只需要使用 Apache 的 mod_proxy.so, mod_proxy_http.so, mod_proxy_ajp.so 等模块,即可使用代理的方法来整合 Apache 和 Tomcat。这些模块默认情况下都存在并是开启着的。
因此,配置如下设置即可:
ProxyPass /tomcat http://www.chenlianfu.com:8080 或 ProxyPass /tomcat ajp://www.chenlianfu.com:8009