Apache+tomcat结合

Apache+tomcat构建web服务器一、apacer+tomcat结合的优势Apache是最流行的Web服务器,开放源代码,支持跨平台的应用(可以运行在几乎所有的Linux、Unix、Windows系统平台上),尤其对Linux的支持相当完美。apache的优点有:功能强大,apache自带了很多功能模块,可根据需求编译自己需要的模块。配置简单,apache的配置文件非...

Apache+tomcat构建web服务器

一、apacer+tomcat结合的优势

Apache是最流行的Web服务器,开放源代码,支持跨平台的应用(可以运行在几乎所有的LinuxUnixWindows系统平台上),尤其对Linux的支持相当完美。
apache的优点有:
功能强大,apache自带了很多功能模块,可根据需求编译自己需要的模块。
配置简单,apache的配置文件非常简单,通过简单的配置可实现强大功能。
速度飞快,apache处理静态页面文件效率非常高,可以应对大并发和高负荷访问请求。
性能稳定,apache在高负荷请求下性能表现卓越,执行效率非常高。
但是apache也有自身的缺点:
只支持静态网页,对于jspphp等动态网页不支持
Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,因此,不太适合于多处理器环境。
TomcatSunApache合作做出来的JSPServer,有如下优点:
支持ServletJSP,可以很好的处理动态网页。
跨平台性好:TomcatJava程序,所以只要有JDK就可以使用,不需要考虑操作系统平台。
但是,tomcat也有自身缺点:
处理静态页面效率不高:Tomcat本身可以做为WebServer,但是tomcat在处理静态页面时没有Apache迅速。
可配置性不强:tomcat不像Apache一样配置简单,稳定、强壮。
综上所述,通过相互的整合刚好弥补了各自的缺点,通过整合可以实现:
客户端请求静态页面时,由Apache服务器响应请求。
客户端请求动态页面时,则是Tomcat服务器响应请求。
通过apache信息过滤,实现网站动、静页面分离,保证了应用的可扩展性和安全性。
既然要让ApacheTomcat协调工作,就必需有一个连接器把它们联系起来,这就是下面要提到的Connector,下个小节具体讲述Connector的选择和使用。

二、Apachetomcat的连接器介绍

Apache是模块化的web服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载来实现。为了让apachetomcat协调工作,开源爱好者们开发出了很多可以利用的模块,在Apache2.2版本之前,一般有两个模块可供选择:mod_jk2mod_jkmod_jk2模块是比较早的一种连接器,在动、静页面过滤上可以使用正则表达式,因此使用配置灵活,但是mod_jk2模块现在已经没有开发人员支持了,版本更新也就此停止。继承jk2模块的是mod_jk模块,mod_jk模块支持Apache 1.x2.X系列版本,现在一般都使用mod_jkApacheTomcat的连接器。
Apache2.2版本以后,又出现了两种连接器可供选择,那就是http-proxyproxy-ajp模块,apacheproxy(代理)模块可以实现双向代理,功能非常强大,从连接器的实现原理看,用http-proxy模块实现也是很自然的事情,只需打开tomcathttp功能,然后用apacheproxy代理功能将动态请求交给tomcat处理,而静态数据交给apache自身就可以了。proxy-ajp模块是专门为tomcat整合所开发的,通过ajp协议专门代理对tomcat的请求。根据官方的测试,proxy-ajp的执行效率要比http-proxy高,因此在Apache2.2以后的版本,用proxy-ajp模块作为apachetomcat的连接器是个不错的选择。
需要说明的是,这些连接功能的实现,都是通过在apache中加载相应的功能模块实现,比如上面提到的mod_jkmod_jk2proxy-ajp模块,都要事先通过源码编译出对应的模块,然后通过apache配置文件动态加载,实现连接器功能。这点也是apache的优势所在。

三、安装配置过程

1、实验环境及软件包需求

Tomcat服务安装在Centos6.4-x86位操作系统上

Apache服务安装在Centos6.4-x64位操作系统上

注:此实验操作系统均安装在vmware10.0虚拟机上。

软件包需求:

Apache

apr-1.4.6.tar.bz2

apr-util-1.5.1.tar.bz2 下载地址:http://apr.apache.org/

httpd-2.4.4.tar.bz2      下载地址:http://httpd.apache.org/

tomcat

jdk-7u45-linux-i586.rpm(x86)        下载地址:

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

apache-tomcat-7.0.42.tar.gz (x86)    下载地址:

http://tomcat.apache.org/download-70.cgi

mod_jk

tomcat-connectors-1.2.37-src.tar.gz    下载地址:

http://tomcat.apache.org/download-connectors.cgi

2、Tomcat服务安装

安装jdk

首先我们来安装jdk

[root@ahao tomcat]# rpm -ivh jdk-7u45-linux-i586.rpm  //因为下载是是rpm包,所以直接就使用rpm安装就可以了

[root@ahao tomcat]# rpm -ql jdk |less  //查看它安装生成的文件

/usr/java/jdk1.7.0_45 //这是jdk安装的主目录,将这个目录添加到系统环境变量中

wKiom1MZnTqR_oUfAADgn7Mm5R0962.jpg

查看是否安装成功:

wKioL1MZnSyicnmXAADkGMpZZBw730.jpg

安装tomcat

[root@ahao tomcat]# tar -zxvfapache-tomcat-7.0.42.tar.gz  -C/usr/local //这是二进制安装,所以直接解压到对应目录就可以了

[root@ahao tomcat]# cd /usr/local/  //切换到安装目录

[root@ahao local]# ln -s apache-tomcat-7.0.42  tomcat  //可以做个链接

我们可以进入tomcat目录下查看tomcat的安装文件,其中也会有tomcat的控制脚本文件bin/ catalina.sh ,也有tomcat的主配置文件conf/ server.xml

[root@ahao ~]# cd /usr/local/tomcat/ webapps/    //这个目录可以说是tomcat的站点主目录,现在我们进入这个目录,建一个我们的测试页面

[root@ahao webapps]# mkdir test

[root@ahao webapps]# cd test

[root@ahaotest]# mkdir -pv test/{lib,WEB-INF,classes}  //WEB-INF目录是放置私有数据的

[root@ahaotest]# vim index.jsp  //编写测试页面

wKiom1MZnWPQ7MyDAAEVfbJ8x4g340.jpg

[root@ahaotest]# /usr/local/tomcat/bin/catalina.sh stop

[root@ahaotest]# /usr/local/tomcat/bin/catalina.sh start

在浏览器中输入:http://192.168.1.159:8080/test/来进行测试:

wKioL1MZnUyD93bnAAE-YNEFozk530.jpg

这样看来我们的测试是正确的,也说明的tomcat服务也正常工作了,

现在我们在tomcat服务器上新建一台主机不使用localhost

[root@ahao tomcat]# cd webapps/

[root@ahao webapps]# mkdir -pv /www/webapps

[root@ahao webapps]# mv test/   /www/webapps/

[root@ahao conf]# vim server.xml  

wKiom1MZnZLSlqkUAAMXaPoB348691.jpg

wKioL1MZnWzgwISsAACq2EVVJPQ455.jpg

由于我们这里没有建dns服务器。所以我们就修改主机的上的hosts文件:

C:\Windows\System32\drivers\etc\hosts 文件中加入如下一行:

192.168.1.159 www.abc.com

[root@ahao conf]# /usr/local/tomcat/bin/catalina.sh stop

[root@ahao conf]# /usr/local/tomcat/bin/catalina.sh start

从浏览器中输入:www.abc.com访问;

wKiom1MZnaLjyQ8NAAEpnB5QZHQ063.jpg

服务运行正常

3、安装Apache服务

安装apr apr-util

[root@ahao http]# tar -zxvf apr-1.5.0.tar.gz -C/usr/local/src

[root@ahao apr-1.5.0]# ./configure  --prefix=/usr/local/apr

[root@ahao apr-1.5.0]# make && make install

[root@ahao http]# tar -zxvf apr-util-1.5.3.tar.gz  -C /usr/local/src

[root@ahao apr-util-1.5.3]# ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config

[root@ahao apr-util-1.5.3]# make && make install

[root@ahao apr-util-1.5.3]# tar -jxvf httpd-2.4.4.tar.gz2  -C /usr/local/src

[root@ahao apr-util-1.5.3]# yum install pcre-devel  //编译之前要安装事件处理库防止出错

[root@ahao httpd-2.4.4]# ./configure --prefix=/usr/local/apache  --sysconfdir=/etc/httpd   --enable-so --enable-rewrite --with-apr=/usr/local/apr/bin/apr-1-config  --with-apr-util=/usr/local/apr-util/bin/apu-1-config  --with-pcre  -with-z   --enable-mpms-shared=all --with-mpm=event  --enable-proxy --enable-proxy-http --enable-proxy-ajp

[root@ahao httpd-2.4.4]# make && make install

安装之后我们先测试启动一下Apache服务:

[root@ahao ~]cd /usr/local/apache/bin

[root@ahao bin]# ./bin/httpd -k start

[root@ahao bin]# netstat -tupln |grep 80   //查看Apache服务端口是否有,如果有就是服务正常启动了,没有就是服务没有正常启动

在我们现在安装之后的情况,80端口并没有正常启动,我们需要找找原因在那里,最有效的方式就是查看Apache服务的日志:

wKioL1MZnY_yv5uWAANWZd46XRw891.jpg

如图所示,出现我们的配置确实出现的问题,这里proxy_balancer模块要启动mod_slotmem_shm动态链接库,可能是我们配置文件中引用的动态链接库中没有这样的库所以我们要加上:

[root@ahao bin]# vim /etc/httpd/httpd.conf   //查看Apache服务配置文件

wKioL1MZnZ7gobs-AAIPN762TuY863.jpg

完成之后,再次测试就可以了,那我们可以编写控制脚本:

[root@ahao bin]# vim /etc/init.d/httpd

[root@ahao bin]# chmod a+x /etc/init.d/httpd

/etc/init.d/目录下编写控制脚本。

#!/bin/bash

prog=/usr/local/apache/bin/httpd

lockfile=/var/lock/subsys/httpd


start () {

     if [ -e $lockfile ];then

    echo "the httpdserver is started"

    else

    echo -n "the httpdserver is starting......"

    sleep 1

    $prog  -k start&& echo -e"[\033[32mOK\033[0m] " && touch $lockfile ||echo"failer"

   fi


}

stop () {

      if [  ! -e $lockfile ];then

    echo "the httpdserver is stoped"

    else

    echo -n "the httpdserver is stoping......"

    sleep 1

   $prog –k stop  && echo "OK" && rm-rf $lockfile || echo "failer"

 fi

}

status (){


     if [ -e $lockfile ];then

       echo "the httpdis running..."

        else

        echo "the httpdis stop "


       fi

}

case "$1" in


start)

   start

   ;;

stop)

   stop

   ;;

restart)

stop

start

  ;;

status)

status

  ;;

*)

echo "USAGE:start|stop|restart"

esac

4、安装mod_jk

[root@ahao ~]# tar -zxvftomcat-connectors-1.2.37-src.tar.gz  -C/usr/local/src

[root@ahao ~]# cd /usr/local/src/

[root@ahao src]# mv tomcat-connectors-1.2.37-src      mod-jk //更名

[root@ahao src]# cd mod-jk/native/

[root@ahao native]# ./buildconf.sh   //生成编译配置文件

[root@ahao native]# ./configure--with-apxs=/usr/local/apache2/bin/apxs //编译生成makefile文件

注意:

如果在编译过程中出现一下错误:

configure: error: Invalid location for apxs:'/usr/local/apache2/bin/apxs'

出现这样错误是我们没有安装Apache的开发包:httpd-devel 所以我们需要安装这个开发包:

[root@ahao native]# yum install httpd-devel

安装之后就可以再次编译了。

[root@ahao native]# make && make install

注意:

编译安装后生成:mod_jk.so动态链接库,在apache-2.0目录中

因为在我们安装Apache时,编译中参数(--enable-mods-shared=all是动态加载链接库的,所以可以自动加载,如果不能自动加载就手动加载到/usr/local/apache/modules目录下就可以了。

5、Apachetomcat的连接


1)通过mod_proxy连接(mod_proxy_httpmod_proxy_ajp

在安装Apache服务之后,我们在服务器上实现一个虚拟主机,需要我们更改配置文件:

[root@ahao modules]# vim /etc/httpd/httpd.conf

wKiom1MZndnzFsceAABQlWptNZY642.jpg

[root@ahao modules]# vim /etc/httpd/extra/httpd-vhosts.conf//编辑虚拟主机的配置文件


ProxyRequests  off //关闭正向代理

ProxyPreserveHost on //启动一对一代理

也就是如果在客户端要访问Apache服务上www.abc.com这个jsp页面,实际上是后方tomcat服务上www.abc.com这个页面,如果是off的话,就直接重定向到tomcat默认站点上了。

ProxyPass  / http://192.168.1.159:8080/ /

ProxyPa***everse  / http://192.168.1.159:8080/ /   //这两行就是使用mod_proxy_http模块实现Apachetomcat的连接的。

wKiom1MZn8zjrLzqAAEC5dzT_bY637.jpg

ProxyPass  / ajp://192.168.1.159:8009//

ProxyPa***everse  / ajp://192.168.1.159:8009/ /

这是使用mod_proxy_ajp模块实现Apachetomcat连接的。

注意:

地址后面的“/”是指的是在tomcat上你jsp页面的path,是在tomcat服务上设置context中的path位置。

[root@ahao src]# cd /usr/local/tomcat/bin/   //重新启动tomcat服务

[root@ahao bin]# ./catalina.sh  stop

[root@ahao bin]# ./catalina.sh  start

我们在浏览器中测试:输入http://www.abc.com

wKiom1MZnemA_bwCAAFQc3wrF_w478.jpg

证明Apachetomcat服务之间的连接是正常的。


2)通过mod_jk连接

首先配置环境变量

       Apache服务上:

wKioL1MZnxOTXVrKAABkzywmZmw690.jpg

                  Tomc服务器上:

wKioL1MZnz7RHizkAAF1ov_Nba0798.jpg

配置httpd.conf

       [root@ahao~]# mkdir /usr/local/apache/conf/

       [root@ahao~]# touch /usr/local/apache/conf/mod_jk.conf

       [root@ahao~]# touch /usr/local/apache/conf/workers.properties

apache中加入mod_jk

[root@ahao ~]# vim /etc/httpd/httpd.conf

加上以下两句:

LoadModule jk_module lib/mod_jk.so

Include/usr/local/apache/conf/mod_jk.conf

[root@ahao ~]#vim  /usr/local/apache/conf/mod_jk.conf

wKiom1MZn5WzXzySAAJedzqUQKQ477.jpg

[root@ahao ~]#vim /usr/local/apache/conf/workers.properties

wKiom1MZn6iTTCmwAAHpFGjnnPU101.jpg

[root@ahao ~] touch /usr/local/apache/logs/mod_jk.log

[root@ahao ~] touch  /usr/local/apache/logs/jk-runtime-status


注意:

原来使用mod_proxy连接的配置,有些要去掉比如:

虚拟主机的设置:

wKioL1MZn5TQlcH-AAD6W3yq4Rc255.jpg

 

下来就是要测试了,我们的测试页面不变还是使用以上测试页面:

在浏览器中输入:http://192.168.1.159/






转载于:https://blog.51cto.com/eyessay/1370001

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐

  • 浏览量 157
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献8602条内容