设为首页 收藏本站
查看: 670|回复: 0

[经验分享] Apache+tomcat结合

[复制链接]

尚未签到

发表于 2018-11-23 07:51:54 | 显示全部楼层 |阅读模式
Apache+tomcat构建web服务器

一、apacer+tomcat结合的优势
Apache是最流行的Web服务器,开放源代码,支持跨平台的应用(可以运行在几乎所有的Linux、Unix、Windows系统平台上),尤其对Linux的支持相当完美。
apache的优点有:
功能强大,apache自带了很多功能模块,可根据需求编译自己需要的模块。
配置简单,apache的配置文件非常简单,通过简单的配置可实现强大功能。
速度飞快,apache处理静态页面文件效率非常高,可以应对大并发和高负荷访问请求。
性能稳定,apache在高负荷请求下性能表现卓越,执行效率非常高。
但是apache也有自身的缺点:
只支持静态网页,对于jsp、php等动态网页不支持
Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,因此,不太适合于多处理器环境。
Tomcat是Sun和Apache合作做出来的JSPServer,有如下优点:
支持Servlet和JSP,可以很好的处理动态网页。
跨平台性好:Tomcat是Java程序,所以只要有JDK就可以使用,不需要考虑操作系统平台。
但是,tomcat也有自身缺点:
处理静态页面效率不高:Tomcat本身可以做为WebServer,但是tomcat在处理静态页面时没有Apache迅速。
可配置性不强:tomcat不像Apache一样配置简单,稳定、强壮。
综上所述,通过相互的整合刚好弥补了各自的缺点,通过整合可以实现:
客户端请求静态页面时,由Apache服务器响应请求。
客户端请求动态页面时,则是Tomcat服务器响应请求。
通过apache信息过滤,实现网站动、静页面分离,保证了应用的可扩展性和安全性。
既然要让Apache和Tomcat协调工作,就必需有一个连接器把它们联系起来,这就是下面要提到的Connector,下个小节具体讲述Connector的选择和使用。
二、Apache与tomcat的连接器介绍
Apache是模块化的web服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载来实现。为了让apache和tomcat协调工作,开源爱好者们开发出了很多可以利用的模块,在Apache2.2版本之前,一般有两个模块可供选择:mod_jk2和mod_jk,mod_jk2模块是比较早的一种连接器,在动、静页面过滤上可以使用正则表达式,因此使用配置灵活,但是mod_jk2模块现在已经没有开发人员支持了,版本更新也就此停止。继承jk2模块的是mod_jk模块,mod_jk模块支持Apache 1.x和2.X系列版本,现在一般都使用mod_jk做Apache和Tomcat的连接器。
在Apache2.2版本以后,又出现了两种连接器可供选择,那就是http-proxy和proxy-ajp模块,apache的proxy(代理)模块可以实现双向代理,功能非常强大,从连接器的实现原理看,用http-proxy模块实现也是很自然的事情,只需打开tomcat的http功能,然后用apache的proxy代理功能将动态请求交给tomcat处理,而静态数据交给apache自身就可以了。proxy-ajp模块是专门为tomcat整合所开发的,通过ajp协议专门代理对tomcat的请求。根据官方的测试,proxy-ajp的执行效率要比http-proxy高,因此在Apache2.2以后的版本,用proxy-ajp模块作为apache和tomcat的连接器是个不错的选择。
需要说明的是,这些连接功能的实现,都是通过在apache中加载相应的功能模块实现,比如上面提到的mod_jk、mod_jk2、proxy-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安装的主目录,将这个目录添加到系统环境变量中
DSC0000.jpg

查看是否安装成功:
DSC0001.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  //编写测试页面
DSC0002.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/来进行测试:
DSC0003.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
DSC0004.jpg

DSC0005.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访问;
DSC0006.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服务的日志:
DSC0007.jpg

如图所示,出现我们的配置确实出现的问题,这里proxy_balancer模块要启动mod_slotmem_shm动态链接库,可能是我们配置文件中引用的动态链接库中没有这样的库所以我们要加上:
[root@ahao bin]# vim /etc/httpd/httpd.conf   //查看Apache服务配置文件
DSC0008.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、Apache与tomcat的连接


1)通过mod_proxy连接(mod_proxy_http,mod_proxy_ajp)
在安装Apache服务之后,我们在服务器上实现一个虚拟主机,需要我们更改配置文件:
[root@ahao modules]# vim /etc/httpd/httpd.conf
DSC0009.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模块实现Apache与tomcat的连接的。
DSC00010.jpg

ProxyPass  / ajp://192.168.1.159:8009//
ProxyPa***everse  / ajp://192.168.1.159:8009/ /
这是使用mod_proxy_ajp模块实现Apache与tomcat连接的。
注意:
地址后面的“/”是指的是在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
DSC00011.jpg
证明Apache与tomcat服务之间的连接是正常的。


2)通过mod_jk连接
  首先配置环境变量
  Apache服务上:
DSC00012.jpg

  Tomc服务器上:
DSC00013.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
DSC00014.jpg

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

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


注意:
原来使用mod_proxy连接的配置,有些要去掉比如:
虚拟主机的设置:
DSC00016.jpg

   

下来就是要测试了,我们的测试页面不变还是使用以上测试页面:
在浏览器中输入:http://192.168.1.159/








  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-638417-1-1.html 上篇帖子: apache rewrite规则转nginx rewrite配置 下篇帖子: 源码包编译安装Apache搭建虚拟Web主机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表