在上一篇中写了tomcat独立部署,自己提供web,自己提供容器。此处使用apache进行代理,apache和tomcat部署在一台主机上。


1、httpd的安装

    httpd使用的版本是httpd-2.4.4.tar.bz2,这里使用源码编译安装。源码可到http://archive.apache.org/dist/httpd/#releases

进行下载。安装前先通过rpm命令查看apr和apr-util包的版本信息,httpd-2.4以上版本需要apr和apr-util的版本至少是1.4以上。通过命令查看apr和apr-util的安装信息如下图:


wKiom1cxqP2xjJ0rAAAcd4_my5U674.png


    这里这两个包还没有安装,如果已经安装过了但并不是1.4以上的版本的话,以前的版本不要卸载(可能被其他软件依赖),在编译安装时可指定新版本的安装路径,在编译安装httpd时将apr的路径指向新的安装路径即可。


在进行编译安装前还要确保开发环境已经安装(即Development Libraries和Development Tools已经安装),可通过命令:

[root@localhost apr-1.4.6]# yum grouplist

来查看这两个组包是否在Installed Groups列表中,如果没有,则使用命令进行安装,安装命令为:

[root@localhost apr-1.4.6]# yum -y groupinstall "Development Libraries" "Development Tools"

开发环境安装好后就可以进行软件包的编译安装了,否则编译安装时会找不到编译器。


安装apr和apr-util

    使用命令将apr压缩包解压后进入解压目录,进行配置,命令如下:

[root@localhost test]# tar xf apr-1.4.6.tar.bz2 

[root@localhost test]# cd apr-1.4.6

[root@localhost apr-1.4.6]# ./configure --prefix=/usr/local/apr --disable-ipv6


    配置完成后没有报错的话,就可以执行 make && make install 命令进行安装了。

    安装完apr后则是安装apr-util,同样先解压进入解压目录,进行配置,命令如下:

[root@localhost test]# tar xf apr-util-1.4.1.tar.bz2 

[root@localhost test]# cd apr-util-1.4.1

[root@localhost apr-util-1.4.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

    同样,配置完成后执行 make && make install 命令进行安装。


上面的包安装完成后就可以安装httpd

[root@localhost test]# tar xf httpd-2.4.4.tar.bz2 

[root@localhost test]# cd httpd-2.4.4

[root@localhost httpd-2.4.4]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-share=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm --enable-slotmem-plain --enable-watchdog

如果使用./configure命令配置时报如下图所示的错误:

wKiom1cxwDSzcwbgAAAj2LjdLcY176.png可使用如下命令进行安装后,再重新使用./configure配置命令进行配置。

[root@localhost httpd-2.4.20]# yum -y install pcre-devel

配置完成后执行 make && make install 命令进行编译安装。


为httpd提供服务脚本

    在/etc/rc.d/init.d/目录下添加httpd文件,使用命令:

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

    在此文件中添加内容

#!/bin/bash

#

# httpd        Startup script for the Apache HTTPServer

#

# chkconfig: - 85 15

# description: Apache is a World Wide Webserver.  It is used to serve \

#            HTML files and CGI.

# processname: httpd

# config: /etc/httpd/conf/httpd.conf

# config: /etc/sysconfig/httpd

# pidfile: /var/run/httpd.pid

 

# Source function library.

. /etc/rc.d/init.d/functions

 

if [ -f /etc/sysconfig/httpd ]; then

       . /etc/sysconfig/httpd

fi

 

# Start httpd in the C locale by default.

HTTPD_LANG=${HTTPD_LANG-"C"}

 

# This will prevent initlog from swallowingup a pass-phrase prompt if

# mod_ssl needs a pass-phrase from theuser.

INITLOG_ARGS=""

 

# Set HTTPD=/usr/sbin/httpd.worker in/etc/sysconfig/httpd to use a server

# with the thread-based "worker"MPM; BE WARNED that some modules may not

# work correctly with a thread-based MPM;notably PHP will refuse to start.

 

# Path to the apachectl script, serverbinary, and short-form for messages.

apachectl=/usr/local/apache/bin/apachectl

httpd=${HTTPD-/usr/local/apache/bin/httpd}

prog=httpd

pidfile=${PIDFILE-/var/run/httpd.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd}

RETVAL=0

 

start() {

       echo -n $"Starting $prog: "

       LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

       RETVAL=$?

       echo

       [ $RETVAL = 0 ] && touch ${lockfile}

       return $RETVAL

}

 

stop() {

       echo-n $"Stopping $prog: "

       killproc-p ${pidfile} -d 10 $httpd

       RETVAL=$?

       echo

       [$RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}

}

reload() {

   echo -n $"Reloading $prog: "

   if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then

       RETVAL=$?

       echo $"not reloading due to configuration syntax error"

       failure $"not reloading $httpd due to configuration syntaxerror"

   else

       killproc -p ${pidfile} $httpd -HUP

       RETVAL=$?

   fi

   echo

}

 

# See how we were called.

case "$1" in

 start)

       start

       ;;

 stop)

       stop

       ;;

 status)

       status -p ${pidfile} $httpd

       RETVAL=$?

       ;;

 restart)

       stop

       start

       ;;

 condrestart)

       if[ -f ${pidfile} ] ; then

              stop

              start

       fi

       ;;

 reload)

       reload

       ;;

 graceful|help|configtest|fullstatus)

       $apachectl$@

       RETVAL=$?

       ;;

  *)

       echo$"Usage: $prog{start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"

       exit1

esac

 

exit $RETVAL

    此服务脚本可根据使用rpm包安装的httpd所提供的服务脚本进行更改。在服务脚本中添加完内容后保存退出,并赋予其执行权限。

[root@localhost bin]# chmod +x /etc/rc.d/init.d/httpd


更改/etc/httpd/httpd.conf文件中的内容。

[root@localhost extra]# vim /etc/httpd/httpd.conf 

执行上面命令打开httpd.conf文件后添加以下内容

PidFile "/var/run/httpd.pid"

并启用模块

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

LoadModule slotmem_plain_module modules/mod_slotmem_plain.so

如下图所示:

wKioL1cynjCRsWUCAAARicfKthc889.png

wKioL1cynjDxE4X2AAAxMkCf_4o556.png


更改后保存并退出,重启httpd服务,并使用netstat命令查看80端口是否已经处于监听状态。

[root@localhost extra]# service httpd restart

[root@localhost extra]# netstat -tnlp

结果如图所示:wKioL1cyn83g5b7JAAAq5BaJwPs951.png

如果已经处于监听状态就可以使用浏览器进行访问了。

主机IP地址如下

wKiom1cyoA_TDmJyAAAnEqHeCeQ737.png

访问界面如下

wKioL1cyoIawV7ncAAAwEJIinfo575.png

这样httpd则已经安装成功。


如何配置apache通过mod_proxy模块与Tomcat连接?

    需要apache已经装载mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(实现Tomcat集群时用到)等模块。

    可以使用命令

[root@localhost extra]# /usr/local/apache/bin/httpd -D DUMP_MODULES |grep proxy

    查看已经装载了哪些模块,没有装载的可到httpd.conf文件中启用起来。


要实现代理功能还需要更改httpd的配置文件,这里使用虚拟主机的方式实现。

[root@localhost extra]# cd /etc/httpd/

[root@localhost httpd]# vim httpd.conf

禁用中心主机

#DocumentRoot "/usr/local/apache/htdocs"

添加内容

Include /etc/httpd/extra/httpd-proxy.conf

保存退出后再根据Include /etc/httpd/extra/httpd-proxy.conf 到/etc/httpd/extra/目录下添加httpd-proxy.conf文件。

[root@localhost httpd]# vim extra/httpd-proxy.conf

文件内容如下:

<VirtualHost  *:80>

ProxyVia On

ProxyRequests Off

ProxyPass  /  http://localhost:8080/

ProxyPa***everse  /  http://localhost:8080/

#ProxyPass  /  http://192.168.1.5:8080/

#ProxyPa***everse  /  http://192.168.1.5:8080/

<Proxy *>

    Order Allow,Deny

    Allow From all

</Proxy>


<Location />

    Order Allow,Deny

    Allow From all

</Location>

</VirtualHost>

    保存退出,使用catalina.sh start 启动tomcat服务,再使用service httpd restart重启httpd服务即可,通过浏览器即可访问通过apache代理的tomcat的主页面。


    上面的红色部分是如果tomcat的安装按照http://ganmu.blog.51cto.com/9305511/1771524网址中进行安装的,会有两个主机host可以访问。

    关于以上Apache指令的说明

ProxyVia On    是否显示响应首部via

ProxyRequests Off  

ProxyPass  /  http://后端主机IP地址:8080/        基于http向后端代理。此处前面路径格式必须和后面路径的格式保持一致,在47-2视频9分钟有说明。

ProxyPa***everse  /  http://后端主机IP地址:8080/     实现重定向,在反向代理中必须使用此指令避免重定向报文绕过Proxy服务器

<Proxy *>       明确说明哪些路径下的访问授权

   Order Allow,Deny

   Allow From all

</Proxy> 

Apache的正反向代理是不能同时实现的。ProxyRequests  off 关闭正向代理,如果为apache设置了ProxyPass,则必须将ProxyRequests设置为off


访问页面如图:

wKiom1cysough5LCAAF_-0zgJ-g303.png


如何实现使用mod_jk模块与Tomcat的连接?

    mod_jk 是一个工作于Apache端基于AJP协议与Tomcat通信的连接器,他是Apache的一个模块,是AJP协议的客户端(服务器端是Tomcat的连接器)

    要想使用mod_jk模块,需要在apache所在的主机装上tomcat-connector,在tomcat所在的主机/usr/local/tomcat/bin/目录下的tomcat-native.tar.gz是用来和前端进行异步高效通信的机制

connector需要到Tomcat官方下载。下载下来编译安装。也可直接到

http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/

下载,里面是tomcat官方的各个connector版本,connector版本要和httpd的版本匹配,否则会出错,可根据两者发行时间进行选择。这里使用的是tomcat-connectors-1.2.37-src.tar.gz。

    

tomcat-connector的安装

下载后解压进行编译安装,命令如下:

[root@localhost test]# tar xf tomcat-connectors-1.2.37-src.tar.gz 

[root@localhost test]# cd tomcat-connectors-1.2.37-src/native/

[root@localhost native]# ./configure --with-apxs=/usr/local/apache/bin/apxs

配置时使用了--with-apxs,原因是只要作为Apache额外的模块存在要进行单独编译的都要使用- -with-apxs。

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

配置完成执行编译安装命令后,会安装路径就在Apache模块路径下,可在modules目录中找到mod_jk.so模块。


更改httpd的配置文件httpd.conf

vim /etc/httpd/httpd.conf 在打开的文件中找到

#Include /etc/httpd/extra/httpd-proxy.conf  注释掉,并添加内容

Include /etc/httpd/extra/httpd-jk.conf 

这是在mod_proxy正常的基础上更改的,如有不正常,可先参考mod_proxy的配置。


    再到/etc/httpd/extra/目录下添加httpd-jk.conf文件

vim /etc/httpd/extra/httpd-jk.conf添加内容如下

# Load the mod_jk

LoadModule jk_module  modules/mod_jk.so   

JkWorkersFile  /etc/httpd/extra/workers.properties   

JkLogFile logs/mod_jk.log

JkLogLevel debug

JkMount /*  Tomcat1   

JkMount /status/  stat1          


LoadModule jk_module  modules/mod_jk.so   指定装载jk模块

JkWorkersFile  /etc/httpd/extra/workers.properties    jk使用很多子进程worker进程,用来跟后端的Tomcat通信,这些worker进程启用多少、如何向后端连接、要不要负载均衡、传递过去的信息是什么等等,都通过一个单独的配置文件定义,配置文件的路径和名称都可以自己定义,此处使用的配置文件是workers.properties


JkMount /*  Tomcat1    把哪个URL路径送到哪个Tomcat上,Tomcat1是jvmRoute名称

JkMount /status/  stat1    上面的Tomcat1和此处的stat1要在/etc/httpd/extra/workers.properties文件中进行定义。stat1 是用来让jk输出jk状态信息的专用的由Apache提供的内嵌的worker。


保存退出/etc/httpd/extra/httpd-jk.conf,并根据此文件中的

JkWorkersFile  /etc/httpd/extra/workers.properties创建新文件

vim  workers.properties添加内容

worker.list= Tomcat1,stat1

worker.Tomcat1.port=8009

worker.Tomcat1.host=tomcat所在主机ip地址

worker.Tomcat1.type=ajp13

worker.Tomcat1.lbfactor=1

worker.stat1.type = status

修改好后保存退出


更改tomcat的配置文件

[root@localhost extra]# vim /usr/local/tomcat/conf/server.xml

更改内容为

<Engine name="Catalina" defaultHost="www.wei.com" jvmRoute="Tomcat1" >

保存退出


重启tomcat服务,重启httpd服务后即可进行访问