michellc 发表于 2018-11-20 08:01:45

apache、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已经安装),可通过命令:
  # yum grouplist
  来查看这两个组包是否在Installed Groups列表中,如果没有,则使用命令进行安装,安装命令为:
  # yum -y groupinstall "Development Libraries" "Development Tools"
  开发环境安装好后就可以进行软件包的编译安装了,否则编译安装时会找不到编译器。

  

  安装apr和apr-util

      使用命令将apr压缩包解压后进入解压目录,进行配置,命令如下:
  # tar xf apr-1.4.6.tar.bz2
  # cd apr-1.4.6
  # ./configure --prefix=/usr/local/apr --disable-ipv6
  

      配置完成后没有报错的话,就可以执行 make && make install 命令进行安装了。
      安装完apr后则是安装apr-util,同样先解压进入解压目录,进行配置,命令如下:
  
  # tar xf apr-util-1.4.1.tar.bz2
  # cd apr-util-1.4.1
  # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
      同样,配置完成后执行 make && make install 命令进行安装。

  

  上面的包安装完成后就可以安装httpd
  # tar xf httpd-2.4.4.tar.bz2
  # cd 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配置命令进行配置。
  # yum -y install pcre-devel
  配置完成后执行 make && make install 命令进行编译安装。
  

  为httpd提供服务脚本
      在/etc/rc.d/init.d/目录下添加httpd文件,使用命令:

  
  # 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所提供的服务脚本进行更改。在服务脚本中添加完内容后保存退出,并赋予其执行权限。
  # chmod +x /etc/rc.d/init.d/httpd

  

  更改/etc/httpd/httpd.conf文件中的内容。
  # 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端口是否已经处于监听状态。
  # service httpd restart
  # netstat -tnlp
  结果如图所示:
  如果已经处于监听状态就可以使用浏览器进行访问了。
  主机IP地址如下
  
  访问界面如下
  
  这样httpd则已经安装成功。
  

  
  如何配置apache通过mod_proxy模块与Tomcat连接?
      需要apache已经装载mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(实现Tomcat集群时用到)等模块。
      可以使用命令
  # /usr/local/apache/bin/httpd -D DUMP_MODULES |grep proxy
      查看已经装载了哪些模块,没有装载的可到httpd.conf文件中启用起来。
  

  要实现代理功能还需要更改httpd的配置文件,这里使用虚拟主机的方式实现。
  # cd /etc/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文件。
  # vim extra/httpd-proxy.conf
  文件内容如下:
  
  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/
  
  Order Allow,Deny
  Allow From all
  
  

  
  Order Allow,Deny
  Allow From all
  
  
      保存退出,使用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服务器
         明确说明哪些路径下的访问授权
  Order Allow,Deny
  Allow From all
  
  Apache的正反向代理是不能同时实现的。ProxyRequestsoff 关闭正向代理,如果为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的安装
  下载后解压进行编译安装,命令如下:
  
  # tar xf tomcat-connectors-1.2.37-src.tar.gz
  # cd tomcat-connectors-1.2.37-src/native/
  # ./configure --with-apxs=/usr/local/apache/bin/apxs
  配置时使用了--with-apxs,原因是只要作为Apache额外的模块存在要进行单独编译的都要使用- -with-apxs。
  # 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_modulemodules/mod_jk.so
  JkWorkersFile/etc/httpd/extra/workers.properties
  JkLogFile logs/mod_jk.log
  JkLogLevel debug
  JkMount /*Tomcat1
  JkMount /status/stat1
  

  
LoadModule jk_modulemodules/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创建新文件
vimworkers.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的配置文件
# vim /usr/local/tomcat/conf/server.xml
  更改内容为
  

  保存退出
  

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

  

  


  

  

  





页: [1]
查看完整版本: apache、tomcat部署——在一台主机内