浅谈Apache与Tomact的整合

一般来讲,配置apache和tomcat的整合有三种方式,mod_proxy,mod_ajp和mod_jk等三种方式,前2种配置步骤类似且相对容易,且只apache2.2以后的版本,mod_jk则配置相对复杂,但强在稳定性和性能方面,因为没有系统的写过这方面的文档,故在此简要的记录下使用mod_proxy和mod_jk两种方式来整合apache和tomcat!

本文环境介绍:
os版本:CentOS5.4 64bit
jdk版本:jdk-6u2-linux-i586.bin
tomcat版本:7.0.29
apache版本:2.4.2
apache服务器IP:192.168.123.110/24
tomcat实例一IP:192.168.123.110/24 (端口默认)
tomcat实例二IP:192.168.123.20/24 (端口默认)

一:mod_proxy方式的整合
1:编译安装apache,需要编译proxy相关的模块,这里采用目前最新版的apache2.4.2

[root@db1 ~]# tar -zxvpf httpd-2.4.2.tar.gz   [root@db1 ~]# cd httpd-2.4.2  [root@db1 httpd-2.4.2]# ./configure --prefix=/usr/local/apache --enable-proxy --enable-proxy-ajp  --enable-rewrite --enable-so  --enable-headers --enable-expires  --enable-modules-shared=most --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/  [root@db1 httpd-2.4.2]# make   [root@db1 httpd-2.4.2]# make install 

若启动apache出现下面的错误,基本上属于apr的问题,要么apr没安装,要么版本不对!

[root@db1 ~]# /usr/local/apache/bin/apachectl -t
httpd: Syntax error on line 113 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/mod_proxy.so into
server: /usr/local/apache/modules/mod_proxy.so: undefined symbol: apr_global_mutex_lockfile

[root@db1 ~]# yum remove apr
[root@db1 ~]# /usr/local/apache/bin/apachectl -t
Syntax OK

[root@db1 ~]# /usr/local/apache/bin/apachectl -t -D DUMP_MODULES |grep proxy
 proxy_module (shared)
 proxy_connect_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_fcgi_module (shared)
 proxy_scgi_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_express_module (shared)

 

2:配置apache的虚拟主机

[root@db1 ~]# /usr/local/apache/bin/apachectl -t -D DUMP_VHOSTS  VirtualHost configuration:  *:80                   is a NameVirtualHost           default server 192.168.123.110 (/usr/local/apache/conf/extra/httpd-vhosts.conf:23)           port 80 namevhost 192.168.123.110 (/usr/local/apache/conf/extra/httpd-vhosts.conf:23)           port 80 namevhost 192.168.123.110 (/usr/local/apache/conf/extra/httpd-vhosts.conf:23)           port 80 namevhost  (/usr/local/apache/conf/extra/httpd-vhosts.conf:31)           port 80 namevhost  (/usr/local/apache/conf/extra/httpd-vhosts.conf:31) 

若启动apache报错如下,则需要加载mod_slotmem_shm.so模块,之前在使用apache中很少用到mod_proxy模块,所以遇到的问题多多!

[root@db1 ~]# /usr/local/apache/bin/apachectl -k start
[root@db1 ~]# echo $?
0
[root@db1 ~]# netstat -ntpl |grep :80
[root@db1 ~]# cat /usr/local/apache/logs/error_log
[Fri Aug 10 18:32:25.298436 2012] [proxy_balancer:emerg] [pid 7859:tid 47937562389216] AH01177: Failed to lookup provider
'shm' for 'slotmem': is mod_slotmem_shm loaded??
[Fri Aug 10 18:32:25.298650 2012] [:emerg] [pid 7859:tid 47937562389216] AH00020: Configuration Failed, exiting
[Fri Aug 10 18:34:04.717801 2012] [proxy_balancer:emerg] [pid 7876:tid 47508265659104] AH01177: Failed to lookup provider
'shm' for 'slotmem': is mod_slotmem_shm loaded??
[Fri Aug 10 18:34:04.717951 2012] [:emerg] [pid 7876:tid 47508265659104] AH00020: Configuration Failed, exiting

[root@db1 ~]# grep 'slotmem' /usr/local/apache/conf/httpd.conf
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

[root@db1 ~]# /usr/local/apache/bin/apachectl -k start
[root@db1 ~]# netstat -ntpl |grep :80
tcp        0      0 :::80                       :::*                        LISTEN      7898/httpd

 

注意:2.4.2版本的apache中需要在目录下面添加 Require all granted,否则无论怎么访问都是403,悲了个催的!具体报错如下:

[Fri Aug 10 19:07:13.263893 2012] [authz_core:error] [pid 8918:tid 1126259008] [client 192.168.123.102:53420] AH01630: client  denied by server configuration: /tmp

[root@db1 ~]# grep -v '^#' /usr/local/apache/conf/extra/httpd-vhosts.conf |grep -v '^$'  <VirtualHost *:80>     ServerName 192.168.123.110       <Location />     Order deny,allow      Deny from all      </Location> </VirtualHost> <VirtualHost *:80>     ServerName         DocumentRoot /tmp      <Directory /tmp>      Options +indexes       Order allow,deny       Allow from all       Require all granted       </Directory> </VirtualHost> 

浅谈Apache与Tomact的整合

 

浅谈Apache与Tomact的整合

 

浅谈Apache与Tomact的整合

3:安装jdk和tomcat,并启动tomcat

[root@db2 ~]# Java -version  java version "1.6.0"  OpenJDK  Runtime Environment (build 1.6.0-b09)  OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)   [root@db2 ~]# /usr/local/tomcat7/bin/startup.sh   Using CATALINA_BASE:   /usr/local/tomcat7  Using CATALINA_HOME:   /usr/local/tomcat7  Using CATALINA_TMPDIR: /usr/local/tomcat7/temp  Using JRE_HOME:        /usr/local/java  Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar   [root@db2 ~]# netstat -ntpl |grep java  tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      7601/java             tcp        0      0 :::8009                     :::*                        LISTEN      7601/java             tcp        0      0 :::8080                     :::*                        LISTEN      7601/java  

浅谈Apache与Tomact的整合

4:使用mod_proxy转发jsp的请求,test目录,tomcat.css,tomcat.png请求使用apache处理

<VirtualHost *:80>     ServerName         DocumentRoot /tmp      <Directory /tmp>      Options +indexes       Order allow,deny       Allow from all       Require all granted      </Directory>     Proxypass /test !      Proxypass /tomcat.css !      Proxypass /tomcat.png !      Proxypass / :8080  </VirtualHost> 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/83632e5d2249d9e425740baf1422ed3e.html