标签:apche、tomcat
在上一篇中写了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的安装信息如下图:
这里这两个包还没有安装,如果已经安装过了但并不是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命令配置时报如下图所示的错误:
可使用如下命令进行安装后,再重新使用./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
如下图所示:
更改后保存并退出,重启httpd服务,并使用netstat命令查看80端口是否已经处于监听状态。
[root@localhost extra]# service httpd restart
[root@localhost extra]# netstat -tnlp
如果已经处于监听状态就可以使用浏览器进行访问了。
主机IP地址如下
访问界面如下
这样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/
ProxyPassReverse / http://localhost:8080/
#ProxyPass / http://192.168.1.5:8080/
#ProxyPassReverse / 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分钟有说明。
ProxyPassReverse / http://后端主机IP地址:8080/ 实现重定向,在反向代理中必须使用此指令避免重定向报文绕过Proxy服务器
<Proxy *> 明确说明哪些路径下的访问授权
Order Allow,Deny
Allow From all
</Proxy>
Apache的正反向代理是不能同时实现的。ProxyRequests off 关闭正向代理,如果为apache设置了ProxyPass,则必须将ProxyRequests设置为off
访问页面如图:
如何实现使用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服务后即可进行访问
本文出自 “甘木” 博客,请务必保留此出处http://ganmu.blog.51cto.com/9305511/1772147
标签:apche、tomcat
原文地址:http://ganmu.blog.51cto.com/9305511/1772147